私は CGImageCreateWithImageInRect を使用して拡大効果を行っていますが、ビューの端に近づいた場合を除いて、美しく機能します。その場合、クリッピングによって画像が歪んでしまいます。現在、ビューの 72x72 チャンクを取得し、それに丸いマスクを適用してから、マスクされた画像とその上に円を描画します。
コピーされたチャンクがビューの端近くにある場合、クリッピングのために 72x72 よりも小さくなり、虫眼鏡で描画すると引き伸ばされます。
たとえば、タッチポイントが左端に近い場合、左の部分が単色で塗りつぶされ、右半分に拡大されたビューの一部が含まれる画像を作成したいと思います。次に、その画像にマスクを適用し、その上にオーバーレイを追加します。
これが私が今していることです。imageRef は拡大されるイメージ、mask は丸いマスク、overlay は拡大領域のエッジをマークする円です。
CGImageRef subImage = CGImageCreateWithImageInRect(imageRef, CGRectMake(touchPoint.x - 36, touchPoint.y - 36, 72, 72));
CGImageRef xMaskedImage = CGImageCreateWithMask(subImage, mask);
CGContextRef context = UIGraphicsGetCurrentContext();
CGAffineTransform xform = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0);
CGContextConcatCTM(context, xform);
CGRect area = CGRectMake(touchPoint.x - 84, -touchPoint.y, 170, 170);
CGRect area2 = CGRectMake(touchPoint.x - 80, -touchPoint.y + 4, 160, 160);
CGContextDrawImage(context, area2, xMaskedImage);
CGContextDrawImage(context, area, overlay);