Как я могу «разрезать» прозрачное отверстие в 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 6 не работает
  • Возможно открытие всплывающих ссылок в UIWebView?
  • Как я смогу удалить объекты из NSMutableArray?
  • Как установить приложение Cocoa в качестве браузера по умолчанию?
  • Определение типа устройства
  • Пользовательские цвета в UITabBar
  • Какова максимальная длина объекта NSString?
  • Как -performSelector: withObject: afterDelay: работать?
  • Как работает новый механизм автоматического подсчета ссылок?
  • Как resize изображения программно в объективе-c в iphone
  • iOS 5: Как преобразовать Emoji в символ Юникода?
  • Давайте будем гением компьютера.