在CGAffineTransformMakeRotation之后设置UIView的中心点

时间:2010-12-25 20:38:13

标签: iphone uiview touchesmoved

我有一个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方法中对旋转进行校正,但到目前为止,所有的尝试都没有找到我。

1 个答案:

答案 0 :(得分:1)

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

尝试此操作,而不是更改视图的中心

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