Мне интересно, как сгладить UITouch
в моем коде. Я могу обнаружить UItouch
на моем UIView
, но когда я пытаюсь повернуть вид с помощью CGAffineTransform
, он не вращается плавно. Мне нужно нажать или долго касаться пальцем iPhone для такого вращения. Как сделать плавные повороты, как в приложении Roambi Visualizer. Спасибо за вашу помощь.
Плавное вращение UIView с касанием
comment
UIVIew Animation может сделать вращение очень плавным, как вы хотите, используя продолжительность анимации.
- person Splendid   schedule 19.03.2011
Ответы (3)
transform
— это анимируемое свойство UIView, поэтому вы можете использовать Core Animation, чтобы сделать вращение плавным:
CGAffineTransform newTransform = //...construct your desired transform here...
[UIView animateWithDuration:0.2
animations:^{view.transform = newTransform;}];
person
Caleb
schedule
18.03.2011
Привет всем, я нашел следующее решение своего вопроса, и оно работает для меня в touchesMoved.....
Вот код....
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] ;
person
JKMania
schedule
24.03.2011
Если вы пытаетесь повернуть его постепенно, вам, вероятно, следует использовать [view setTransform:CGAffineTransformRotate(view.transform, angle)]. В противном случае это прекрасно работает!
- person Josh Kovach; 14.09.2011
Это может быть или не быть давно мертвым, но есть несколько небольших проблем с ответом камеры.
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)
})
}
person
Nate4436271
schedule
09.07.2015