UIImageView的旋转移动缩放在旋转180*之后反向移动



这是我移动、缩放和旋转UI的代码ImageView都可以正常工作,但问题是当我们旋转ImageView时,它会旋转,但之后它会反向移动,就像我向右拖动一样,但ImageView会向左移动难道我们不能在旋转后得到当前的中心点,这样当我们拖动中心点时,中心点是旋转的ImageView而不是原始的吗

这是UIImageView 继承的自定义类

#pragma mark Manipulation
-(void)scale:(id)sender {
    if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) 
{
        _lastScale = 1.0;
    }
    CGFloat scale = 1.0 - (_lastScale - [(UIPinchGestureRecognizer*)sender scale]);
    CGAffineTransform currentTransform = self.transform;
    CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale);
    [self setTransform:newTransform];

    _lastScale = [(UIPinchGestureRecognizer*)sender scale];
    [self showOverlayWithFrame:self.frame];
}

-(void)rotate:(id)sender {
    if([(UIRotationGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) {
        _lastRotation = 0.0;
        return;
    }

    CGFloat rotation = 0.0 - (_lastRotation - [(UIRotationGestureRecognizer*)sender rotation]);
    CGAffineTransform currentTransform = self.transform;
    CGAffineTransform newTransform = CGAffineTransformRotate(currentTransform,rotation);
    [self setTransform:newTransform];
    _lastRotation = [(UIRotationGestureRecognizer*)sender rotation];
    [self showOverlayWithFrame:self.frame];


}

-(void)move:(id)sender {
    CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:self];
     if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) {
         _firstX = [self center].x;
         _firstY = [self center].y;
    }
    translatedPoint = CGPointMake(_firstX+translatedPoint.x, _firstY+translatedPoint.y);
    [self setCenter:translatedPoint];

    [self showOverlayWithFrame:self.frame];
}

2个选项:

  1. 使用CGAffineTransformTranslate的方式与使用ScaleRotate的方式相同
  2. 更好的是,重置仿射变换,移动图像视图,然后设置回变换

尝试此代码用于选项2:

CGAffineTransform t = self.transform;
self.transform = CGAffineTransformIdentity;
[self setCenter:translatedPoint];
self.transform = t;

通过在-(void)move:(id)sender中更改这一行,刚刚完成了我的任务

较旧的

CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:self];

纠正

CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:[self superview]];

最新更新