【发布时间】:2019-05-20 21:03:50
【问题描述】:
我有一个 UIView。那个 UIView 里面有一个 UIImageView。 UIImageView 不符合自动布局约束。父 UIView 的边界被剪裁。 现在 UIImageView 的内容模式是 Aspect Fill,但 UIImageView 的大小总是被计算并设置为正在渲染的 UIImage 的大小。所以 UIImageView 的大小将永远等于 UIImage 的大小。
现在可以定位 UIImageView。它应用了平移手势。 UIImageView 正在根据用户的要求在父 UIView 中移动。
我的任务是将 UIImageView 的 UIImage 裁剪为仅父 UIVIew 的可见视口。核心裁剪图像不是问题,但找到可见的矩形是问题。
我不起作用的解决方案是将父 UIView 和子 UIImageView 的框架转换为窗口屏幕。然后找到新转换帧的交集。但这不起作用。这背后应该有一些我无法成功提出的简单数学。
这是我目前的代码。
CGRect imgFrame = [_pageImageView convertRect:_pageImageView.frame toView:nil];
CGRect viewportFrame = [_viewportView convertRect: _viewportView.frame toView:nil];
CGRect visibleRect = CGRectIntersection(imgFrame, viewportFrame);
CGImageRef imageRef = CGImageCreateWithImageInRect([_pageImageView.image CGImage], visibleRect);
UIImage *cropped = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
我的目标是找到通过裁剪的父 UIVIew 可见的可见矩形,然后根据该可见矩形裁剪 UIImageView。重要提示:UIImageView 可以在父 UIView 中定位和移动。
编辑:由于我的内部原因,我不能像许多其他讨论中使用的那样使用 UIScrollView 进行裁剪。
【问题讨论】:
标签: ios objective-c uiview cgrect