Iphone 如何使用单手指旋转图像视图并调整其大小

Iphone 如何使用单手指旋转图像视图并调整其大小,iphone,ios,uiimageview,rotation,image-resizing,Iphone,Ios,Uiimageview,Rotation,Image Resizing,我正在开发一个应用程序,它具有通过拖动右下角按钮来调整和旋转imageview的功能 我看到一个应用程序,它有一个功能,如果我们沿对角线方向拖动右下角的按钮,imageview大小已经调整,或者如果我们向左或向右拖动按钮,imageview已经按照方向旋转。我希望在我的应用程序中实现此功能 我正在努力实现单手指旋转以及调整imageview的大小 通过拖动右下角的按钮,我可以成功地调整imageview的大小。但我没有足够的知识将旋转添加到图像视图中 请用正确的方式引导我 我添加了下面的代码,用

我正在开发一个应用程序,它具有通过拖动右下角按钮来调整和旋转imageview的功能

我看到一个应用程序,它有一个功能,如果我们沿对角线方向拖动右下角的按钮,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);
    }
}
-(void)touchesbeated:(NSSet*)toucheevent:(UIEvent*)event{
UITouch*touch=[[event AllTouchs]anyObject];
touchStart=[[Touchs anyObject]locationInView:imageView];
isResizingLR=(containerww.bounds.size.width-touchStart.x

我已修复此问题,并将此控件上载到cocoacontrols中

和示例代码

更新的答案


我遇到了与你相同的障碍,所以我开发了自己的模块。这将是一个很好的参考

首先,确保视图的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);
第三,确保使用相对坐标,如下所示:

    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);
这可能会有帮助

具有OneFingerRotation、Scale、Resize和Close功能的视图

特点:

  • 单指旋转刻度
  • 一个手指调整大小
  • 使用特性启用/取消旋转、缩放和调整大小
  • 自动管理多个视图
  • 也可以使用UIScrollView
  • 快速响应

  • 你怎么能仅仅从一个点得到一个角度呢?我看到一个应用程序。他们实现了这个功能。我不知道他们是如何实现的。@JitendraSingh是的,我得到了solution@thavasidurai嘿。代码真的很好。但它在两个独立的视图上实现了旋转和调整大小。我需要一个视图,就像上图所示。你们知道吗关于如何做到这一点。@coder1010请看我的答案,那里会有示例代码链接,你可以找到你想要的。我玩过ZDStickerView,它工作得很好,我期待你能提供更多类似的控件。@thavasidurai谢谢:-)如果你对ZDStickerView有任何问题,请给我一个github的问题。太好了!谢谢s、 你节省了我的时间!伪造的三等图书馆