Я хочу добавить скругленные углы к UIImageView без использования QuartzCore, чтобы избежать проблем с производительностью в UIScrollView, так что я решил его так:Клип UIImage с UIBezierPath Асинхронный
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:UIRectCornerTopLeft|UIRectCornerTopRight cornerRadii:CGSizeMake(self.cornerRadius, self.cornerRadius)];
[path addClip];
UIGraphicsBeginImageContextWithOptions(rect.size, NO, [[UIScreen mainScreen] scale]);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetBlendMode(UIGraphicsGetCurrentContext(),kCGBlendModeClear); CGContextSetStrokeColorWithColor(context, [UIColor clearColor].CGColor);
CGContextAddPath(context,path.CGPath);
CGContextClip(context);
CGContextClearRect(context,CGRectMake(0,0,width,height));
[_image drawInRect:rect];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
К сожалению, названный в DrawRect, это занимает немного времени обработки, которое вызывает задержку при прокрутке в UIScrollView. Поэтому я попытался обработать это в отдельном потоке с помощью dispatch_async. Это устранило отставание, и все работает плавно, как должно быть. Но теперь у меня другая проблема. Я получаю много недопустимых контекстных сообщений в отладчике, потому что GraphicsContext не всегда присутствует, когда поток запускает обработку изображения асинхронно. Есть ли способ обрабатывать закругленные углы в моем изображении без получения недопустимых контекстных сообщений? Обратите внимание, что я не хочу использовать функции cornerRadius или маски-функции QuarzCore.
спасибо за совет, отлично работает;) – kohaXun
Отличное решение, работайте как шарм. –