我用CGImageCreateWithImageInRect做了一个放大效果,它工作得很漂亮,除非我靠近我的视野边缘。在这种情况下,剪裁会导致图像失真。现在,我抓取一个72x72的视图块,应用一个圆形遮罩,然后绘制遮罩图像,在上面画一个圆。
例如,当接触点靠近左边缘时,我想创建一个图像,其中左半部分用纯色填充,右半部分包含被放大的部分视图。然后将遮罩应用于该图像并在顶部添加覆盖。
这就是我现在要做的。imageRef是被放大的图像,mask是一个圆形的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);