Как я могу «разрезать» прозрачное отверстие в UIImage?

Я пытаюсь разрезать прозрачный квадрат в UIImage, но я честно должен понять, где и как начать.

Любая помощь будет принята с благодарностью.

Благодаря!

Предположим, что ваше изображение отображается в представлении – вероятно, UIImageView. Затем мы можем пробить прямоугольное отверстие в этом виде, маскируя слой вида . У каждого вида есть слой. Мы будем применять к слою этого представления маску, которая сама является слоем, содержащим изображение, которое мы будем генерировать в коде. Изображение будет черным, за исключением прозрачного прямоугольника где-то посередине. Этот прозрачный прямоугольник вызовет отверстие в изображении.

Итак, пусть self.iv будет этим UIImageView. Попробуйте запустить этот код:

 CGRect r = self.iv.bounds; CGRect r2 = CGRectMake(20,20,40,40); // adjust this as desired! UIGraphicsBeginImageContextWithOptions(r.size, NO, 0); CGContextRef c = UIGraphicsGetCurrentContext(); CGContextAddRect(c, r2); CGContextAddRect(c, r); CGContextEOClip(c); CGContextSetFillColorWithColor(c, [UIColor blackColor].CGColor); CGContextFillRect(c, r); UIImage* maskim = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); CALayer* mask = [CALayer layer]; mask.frame = r; mask.contents = (id)maskim.CGImage; self.iv.layer.mask = mask; 

Например, на этом изображении белый квадрат не является наложенным квадратом, это отверстие, показывающее белый фон windows за ним:

введите описание изображения здесь

EDIT : Я чувствую себя обязанным, так как я упомянул об этом в комментарии, чтобы показать, как делать то же самое с CAShapeLayer. Результат точно такой же:

 CGRect r = self.iv.bounds; CGRect r2 = CGRectMake(20,20,40,40); // adjust this as desired! CAShapeLayer* lay = [CAShapeLayer layer]; CGMutablePathRef path = CGPathCreateMutable(); CGPathAddRect(path, nil, r2); CGPathAddRect(path, nil, r); lay.path = path; CGPathRelease(path); lay.fillRule = kCAFillRuleEvenOdd; self.iv.layer.mask = lay; 

Вот простая функция Swift: cut#hole#inView для копирования и вставки для 2017

 func cut(hole: CGRect, inView v: UIView) { let p:CGMutablePath = CGMutablePath() p.addRect(inView.bounds) p.addRect(hole) let s = CAShapeLayer() s.path = p s.fillRule = kCAFillRuleEvenOdd v.layer.mask = s } 
  • XCode 4 зависает при «Присоединении к (имя приложения)»
  • Предварительная буферизация для AVQueuePlayer
  • iPhone - UILabel, содержащий текст с несколькими шрифтами одновременно
  • target переопределяет настройки FRAMEWORK_SEARCH_PATHS
  • Добавить анимированное изображение Gif в Iphone UIImageView
  • objective @ Символ перед строк?
  • Выполнение команды терминала из приложения Cocoa
  • Замена на устаревший размерWithFont: в iOS 7?
  • UIPageViewController не возвращает никаких распознавателей жестов в iOS 6
  • Как перехватить ссылку на ссылку в UITextView?
  • Автоматически запускать локальные уведомления ежедневно в динамическое время, заданное в массивах. objective ios
  • Давайте будем гением компьютера.