Плавное вращение UIView с прикосновением - PullRequest
3 голосов
/ 18 марта 2011

Мне интересно, как сгладить UITouch в моем коде.Я могу обнаружить UItouch на моем UIView, но когда я пытаюсь повернуть вид с помощью CGAffineTransform, он не вращается плавно.Я должен нажать или длинное прикосновение пальца на iPhone для такого рода вращения.Как я могу выполнять плавные повороты, как приложение Roambi Visualizer.Спасибо за вашу помощь.

Ответы [ 3 ]

3 голосов
/ 18 марта 2011

transform является анимируемым свойством UIView, поэтому вы можете использовать Core Animation, чтобы сделать вращение плавным:

CGAffineTransform newTransform = //...construct your desired transform here...
[UIView animateWithDuration:0.2
                 animations:^{view.transform = newTransform;}];
1 голос
/ 09 июля 2015

Это может быть или не быть давно мертвым, но есть несколько небольших проблем с ответом Кэмерон.

 pastLocation.y = self.center.y - currentLocation.y;

должно быть

 pastLocation.y = self.center.y - pastLocation.y;

Если вы хотите сделать это быстро, я воспользовался ответом Кэма, чтобы выяснить следующее:

override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
    var touch: UITouch = touches.first as! UITouch

    var currentTouch = touch.locationInView(self.view)
    var previousTouch = touch.previousLocationInView(self.view)

    currentTouch.x = currentTouch.x - self.view.center.x
    currentTouch.y = self.view.center.y - currentTouch.y

    previousTouch.x = previousTouch.x - self.view.center.x
    previousTouch.y = self.view.center.y - previousTouch.y

    var angle = atan2(previousTouch.y, previousTouch.x) - atan2(currentTouch.y, currentTouch.x)

    UIView.animateWithDuration(0.1, animations: { () -> Void in
        bigCircleView?.transform = CGAffineTransformRotate(bigCircleView!.transform, angle)
    })

}
1 голос
/ 24 марта 2011

Привет всем, я нашел следующее решение для моего вопроса и его работы для меня в штрихах .....

Вот код ....

UITouch *touch = [touches anyObject];
CGPoint currentLocation = [touch locationInView:self.superview];
CGPoint pastLocation = [touch previousLocationInView:self.superview];
currentLocation.x = currentLocation.x - self.center.x;
currentLocation.y = self.center.y - currentLocation.y;
pastLocation.x = pastLocation.x - self.center.x;
pastLocation.y = self.center.y - currentLocation.y;
CGFloat angle = atan2(pastLocation.y, pastLocation.x) - atan2(currentLocation.y, currentLocation.x); 
CGAffineTransform transform = CGAffineTransformMakeRotation(angle);

// Apply the affine transform

[[self.superview viewWithTag:ROTATE_VIEW_TAG] setTransform:transform] ;
...