如何用单个手指旋转和调整图像视图大小

5

我正在开发一个应用程序,其中有一个功能是通过拖动底部右侧按钮来调整图像视图的大小和旋转。

我看到了一个应用程序,该应用程序具有以下功能:如果我们对角线拖动底部右侧的按钮,则会调整图像视图的大小;否则,如果我们将按钮向左或向右拖动,则会根据方向旋转图像视图。 我希望在我的应用程序中实现这个功能。

我正在努力实现单指旋转以及调整图像视图的大小。

我成功地通过拖动右下角的按钮来调整图像视图的大小。 但是我不知道如何向图像视图添加旋转。

请指导我正确的方法。

下面是调整图像视图大小的代码:

- (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);
    }
}

enter image description here


你怎么可能仅从一个点得到一个角度呢? - user529758
我看到一个应用程序,他们已经实现了这个功能。我不知道他们是如何实现的。 - thavasidurai
@JitendraSingh 是的,我找到了解决方案。 - thavasidurai
@thavasidurai 你好。代码非常好。但它在两个不同的视图上实现了旋转和调整大小。我需要在一个视图上实现,就像上面显示的图片一样。你有任何关于如何实现这个的想法吗? - coder1010
@coder1010 请查看我的答案,那里会有示例代码链接,你可以找到你想要的。 - thavasidurai
3个回答

10

我曾经遇到和你一样的障碍,因此我开发了自己的模块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);

我使用了ZDStickerView,它的表现非常优秀,我期待着从您那里获得更多类似的控件。 - thavasidurai
@thavasidurai 谢谢 :-) 如果你在使用ZDStickerView时遇到任何问题,请通过Github给我提出问题。 - Kim
太好了!谢谢,你节省了我的时间! - vir us

5

-1

这个可能会有帮助,https://github.com/zedoul/ZDStickerView

IQStickerView具有OneFingerRotation、缩放、调整大小和关闭功能。

特征:

  1. 单指旋转缩放。
  2. 单指调整大小。
  3. 使用属性启用/禁用旋转、缩放、调整大小。
  4. 自动管理多个IQStickerView。
  5. 也可以与UIScrollView一起使用。
  6. 快速响应。

虚假的第三方类库 - Mehul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接