如何使用CGAffineTransform移动和旋转视图?

时间:2014-08-19 18:28:29

标签: uiview uigesturerecognizer cgaffinetransform

我想使用平移手势识别器移动视图。

UIPanGestureRecognizer *gesture;

CGPoint touch = [gesture locationInView:view.superview];

view.frame = CGRectMake(touch.x, touch.y, view.frame.size.width, view.frame.size.height);

此外,我想在视图移动时旋转视图。

view.transform = CGAffineTransformMakeRotation(multiplier * M_2_PI);

我有两个基本问题:

  1. 移动并非从用户触摸视图开始。
  2. 当我尝试移动和旋转视图时,它会超出逻辑范围。
  3. 有人可以给我一个非常基本的代码示例,说明如何使用 CGAffineTransform 修复这些问题,而不是去阅读本文吗?

1 个答案:

答案 0 :(得分:2)

您可以在此处找到代码示例https://github.com/K-Be/ViewMovingTest 主要想法是

  1. 保存视图中心的起点。
  2. 查找翻译并将其应用于视图的中心。
  3. 如果你想改变帧,你应该在应用之前设置身份变换,并在应用之后恢复变换,因为frame是bounds,center,transform(https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instp/UIView/frame
  4. 的函数。

    这是一些代码:

    if (_panRecognizer.state == UIGestureRecognizerStateBegan)
    {
        _startCenter = _frameView.center;
    }
    else if (_panRecognizer.state == UIGestureRecognizerStateChanged)
    {
        CGPoint transition = [_panRecognizer translationInView:self.view];
        CGPoint newCenter = CGPointMake(_startCenter.x + transition.x, _startCenter.y + transition.y);
        self.frameView.center = newCenter;
    }
    else
    {
    
    }
    

    CGAffineTransform transform = self.frameView.transform;
    self.frameView.transform = CGAffineTransformIdentity;
    self.frameView.frame = CGRectInset(self.view.bounds, CGRectGetWidth(self.view.bounds) / 3.0, CGRectGetHeight(self.view.bounds) / 3.0);
    self.frameView.transform = transform;