ios 如何用一根手指旋转图像视图并调整其大小

qrjkbowd  于 2023-03-05  发布在  iOS
关注(0)|答案(3)|浏览(214)

我正在开发一个应用程序,它具有通过拖动右下角按钮来调整大小和旋转imageview的功能。
我看到一个应用程序,其中有功能,如果我们拖动右下角按钮对角线imageview大小已调整大小,否则如果我们拖动按钮左侧或右侧方向imageview已按方向旋转。我希望在我的应用程序中实现此功能
我正在努力实现单指旋转以及调整imageview的大小。
我可以通过拖动图像视图右下角的按钮来成功地实现图像视图的大小调整。但是我没有足够的知识来为图像视图添加旋转
请指引我正确的道路。
我添加了下面的代码,通过拖动图像视图的右角来调整其大小。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [[event allTouches] anyObject];

    touchStart = [[touches anyObject] locationInView:imageView];
    isResizingLR = (containerVw.bounds.size.width - touchStart.x < kResizeThumbSize && containerVw.bounds.size.height - touchStart.y < kResizeThumbSize);

}


- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
CGPoint touchPoint = [[touches anyObject] locationInView:imageView];
CGPoint previous=[[touches anyObject]previousLocationInView:imageView];

UITouch *touch = [[event allTouches] anyObject];

float  deltaWidth = touchPoint.x-previous.x;
float  deltaHeight = touchPoint.y-previous.y;

    if (isResizingLR) {
        containerVw.frame = CGRectMake(containerVw.frame.origin.x, containerVw.frame.origin.y,touchPoint.x + deltaWidth, touchPoint.y + deltaWidth); 
        imageView.frame = CGRectMake(imageView.frame.origin.x, imageView.frame.origin.y,touchPoint.x + deltaWidth, touchPoint.y + deltaWidth);                      
        dragIm.frame = CGRectMake(containerVw.frame.size.width-10, containerVw.frame.size.height-10,20,20);

    if (!isResizingLR) {
        containerVw.center = CGPointMake(containerVw.center.x + touchPoint.x touchStart.x,containerVw.center.y + touchPoint.y - touchStart.y);
    }
}

plupiseo

plupiseo1#

我遇到了和你一样的障碍,所以我开发了我自己的ZDStickerView模块。这将是一个很好的参考。
首先,确保视图的autoresizingMask应该是灵活的。

autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight

否则调整大小将无法正常工作。
第二,我推荐你使用“CGAffineTransformMakeRotation”和“atan2”函数来解决旋转问题,如下所示:

float ang = atan2([recognizer locationInView:self.superview].y - self.center.y,
                      [recognizer locationInView:self.superview].x - self.center.x);
    float angleDiff = deltaAngle - ang;
    self.transform = CGAffineTransformMakeRotation(-angleDiff);

第三,一定要使用相对坐标,像这样:

self.transform = CGAffineTransformMakeRotation(-angleDiff);
yks3o0rb

yks3o0rb3#

这可能会有帮助,https://github.com/zedoul/ZDStickerView
IQStickerView具有单指旋转、缩放、调整大小和关闭功能。
特点:
1.单指旋转刻度。
1.一个手指调整大小。
1.使用属性启用/禁用旋转、缩放、调整大小。
1.自动管理多个IQStickerView。
1.也可以使用UIScrollView。
1.快速响应。

相关问题