通过手势识别器操作后裁剪 UIImageView
Posted
技术标签:
【中文标题】通过手势识别器操作后裁剪 UIImageView【英文标题】:Crop UIImageView after manipulated through gesture recognizer 【发布时间】:2016-01-12 02:46:54 【问题描述】:我在解决这个问题时遇到了问题!我看到的所有示例都与滚动视图有关,而我没有使用。在通过捏合、平移和旋转操作图像后,我需要在预定的 CGRect 区域内裁剪图像。我下面的代码在左上角裁剪了未经处理的图像。
澄清 pendantCanvasView 是视图(容器),而 pendantImageView 是 pendantCanvasView 的子类。 PendantFrame 只是一个 CGRect,它具有我要裁剪的 pendantImageView 中的矩形坐标。
有人可以帮我吗?
这是我到目前为止的代码:
- (void)addMoveImageToolbox
UIPinchGestureRecognizer *pinchRec = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(handlePinch:)];
[self.pendantCanvasView addGestureRecognizer:pinchRec];
UIRotationGestureRecognizer *rotateRec = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(handleRotate:)];
[self.pendantCanvasView addGestureRecognizer:rotateRec];
UIPanGestureRecognizer *panRec = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
[self.pendantCanvasView addGestureRecognizer:panRec];
- (void)handlePinch:(UIPinchGestureRecognizer*)pinch
self.pendantImageView.transform = CGAffineTransformScale(self.pendantImageView.transform, pinch.scale, pinch.scale);
self.zoomScale = pinch.scale;
pinch.scale = 1;
- (void)handleRotate:(UIRotationGestureRecognizer*)rotate
self.pendantImageView.transform = CGAffineTransformRotate(self.pendantImageView.transform, rotate.rotation);
rotate.rotation = 0;
- (void)handlePan:(UIPanGestureRecognizer *)pan
CGPoint translation = [pan translationInView:self.pendantCanvasView];
self.pendantImageView.center = CGPointMake(self.pendantImageView.center.x + translation.x,
self.pendantImageView.center.y + translation.y);
[pan setTranslation:CGPointMake(0, 0) inView:self.pendantImageView];
裁剪方法:
- (UIImage *)captureScreenInRect
UIGraphicsBeginImageContextWithOptions(pendantFrame.size, NO, [UIScreen mainScreen].scale);
[self.pendantCanvasView drawViewHierarchyInRect:pendantFrame afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();self.pendantImageView.constraints
return image;
【问题讨论】:
【参考方案1】:我相信 drawViewHierarchyInRect 会重新渲染视图层次结构,因此它可能会丢失您对 imageView 的更改。
您可以尝试使用 snapshotViewAfterScreenUpdates。
我不确定 pendantCanvasView、pendantImageView 和 pendantFrame 之间的关系是什么,但可以使用其中一个或另一个的 layer 属性的 renderInContext 方法来获取裁剪后的图像。
【讨论】:
您好,感谢您的回复!我编辑了我的问题来解释这种关系。我不知道这是否有帮助,但我会尝试你的建议。以上是关于通过手势识别器操作后裁剪 UIImageView的主要内容,如果未能解决你的问题,请参考以下文章