Это может быть или не быть давно мертвым, но есть несколько небольших проблем с ответом Кэмерон.
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)
})
}