【问题标题】:How can I move and rotate a view using CGAffineTransform?如何使用 CGAffineTransform 移动和旋转视图?
【发布时间】:2014-08-19 18:28:29
【问题描述】:

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

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. 当我尝试移动和旋转视图时,它超出了逻辑范围。

谁能给我一个非常基本的代码示例,告诉我如何使用 CGAffineTransform 解决这些问题,而不是去阅读这个和那个?

【问题讨论】:

标签: uiview uigesturerecognizer cgaffinetransform


【解决方案1】:

你可以在这里找到代码示例https://github.com/K-Be/ViewMovingTest 主要思想是

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

这是一些代码:

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多