2010-09-20 3 views
2

У меня вопрос о том, как я должен подходить к вращению UIView с событиями на основе касания.Поворот UIView с помощью UITouch

Проще говоря, я хочу, чтобы повернуть UIView вокруг anchorpoint, в зависимости от того, где я касаюсь и выключаться в этой точке зрения. Представьте себе регулятор громкости на hifi, который вы поворачиваете одним пальцем.

Я построил метод вращения с использованием CAKeyframeAnimation, который выполняет transform.rotation.z, однако я не уверен, что (a) я должен использовать это в сочетании с сенсорными методами и (b) как я может получить координату/угол касания относительно лежащего в основе UIView, а затем превратить его в касание.

Надеюсь, у меня есть смысл ... Может ли кто-нибудь сделать какие-либо предложения?

ответ

1
- (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); 
} 
+0

Что такое duagramImageView? Код работает для меня, но когда я начинаю перемещать представление, поворачивайте на 180 градусов и после того, как я смогу использовать его как циферблат. Любая помощь? – 2011-12-02 14:10:09

2
- (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 Подкласс и Вуаля!

Смежные вопросы