使用UITouch旋转UIView

时间:2010-09-20 18:06:41

标签: iphone uiview rotation touch

我有一个关于如何使用基于触摸的事件来旋转UIView的问题。

很简单,我想围绕一个锚点旋转UIView,具体取决于我在该视图中触摸和关闭的位置。想象一下高保真音量旋钮,用一根手指转动。

我使用CAKeyframeAnimation构建了一个执行transform.rotation.z的旋转方法,但是我不确定是否(a)我应该将它与触摸方法一起使用,以及(b)我如何能够获取相对于底层UIView的触摸坐标/角度,然后将其转向指向触摸。

我希望我有意义......任何人都可以提出任何建议吗?

2 个答案:

答案 0 :(得分:3)

- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

CGPoint newLocationPoint = [[touches anyObject] locationInView:self.superview];

int x = self.superview.center.x;
int y = self.superview.center.y;

float dx = newLocationPoint.x - x;
float dy = newLocationPoint.y - y;

double angle = atan2(-dx,dy);

self.layer.position = self.superview.center;
self.layer.transform = CATransform3DMakeRotation(angle, 0, 0, 1);

NSLog(@"%f,%f ", dx,dy);

}

把它放在你的UIView子类和Voila中!

答案 1 :(得分:2)

- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

CGPoint Location = [[touches anyObject] locationInView:self];

int x = ImageView.center.x;
int y = ImageView.center.y;

float dx = Location.x - x;
float dy = Location.y - y;

double a = atan2(-dx,dy);
ImageView.layer.position = diagramImageView.center;
ImageView.layer.transform = CATransform3DMakeRotation(a, 0, 0, 1);
}