UIScrollView のパフォーマンスの問題を回避するために、QuartzCore を使用せずに丸みを帯びた角を UIImageView に追加したいので、次のように解決しました。
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 が常に存在するとは限らないため、デバッガーで多くの無効なコンテキスト メッセージが表示されます。無効なコンテキスト メッセージを取得せずに、画像の丸みを帯びた角を処理する方法はありますか? QuarzCore の cornerRadius またはマスク関数を使用したくないことに注意してください。