【问题标题】:Set center point of UIView after CGAffineTransformMakeRotation在 CGAffineTransformMakeRotation 之后设置 UIView 的中心点
【发布时间】:2010-12-25 20:38:13
【问题描述】:

我有一个 UIView,我希望用户能够在屏幕上拖动。

-(void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event 
{
    CGPoint pt = [[touches anyObject] locationInView:self];

    CGPoint center = self.center;

    CGFloat adjustmentX = pt.x - startLocation.x;
    CGFloat adjustmentY = pt.y - startLocation.y;

   center.x += adjustmentX;
   center.y += adjustmentY;

   [self setCenter:center];
}

在我对视图应用如下变换之前完美运行:

self.transform = CGAffineTransformMakeRotation(....);

但是,一旦应用了变换,拖动 UIView 会导致视图以指数螺旋效果移动。

我假设我必须对 touchesMoved 方法中的旋转进行更正,但到目前为止,我没有尝试过所有尝试。

【问题讨论】:

  • 嗨@Dave你找到解决方案了吗?

标签: iphone uiview touchesmoved


【解决方案1】:

您需要将变换转换为新坐标,因为将标识以外的变换分配给您的视图,并且移动其中心会改变变换的结果。

试试这个而不是改变视图的中心

self.transform = CGAffineTransformTranslate(self.transform, adjustmentX, adjustmentY);

【讨论】:

  • 这可以完美运行,直到通过 CGAffineTransformMakeRotation 执行另一个旋转,因为 self.center 尚未更新 - 这意味着旋转点不正确。解决方案似乎是在旋转之前设置 self.center ,但这会导致最初的错误行为。
  • 再次应用新的变换将使之前的变换无效(之前的旋转+移动),您可以继续应用这样的旋转 self.transform = CGAffineTransformRotate(self.transform, addedAngle); // 附加角度可以是 newAngle - previousAngle
猜你喜欢
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多