2017-03-28 7 views
1

私はCGAffineTransformを使用しているImageViewを回転しようとしています。基本的には、私がしたいのは、x座標が増えるたびにImageViewを少し回転させたいということです。CGAffineTransformとPanGestureRecognizerを使用してImageViewを回転する

私は数学をやったので、ImageViewを1.6º毎に1 x-coordinateのように回転させたいと思います。

@objc func personDragRecognizer(recognizer: UIPanGestureRecognizer) { 

    let rotationAngle: CGFloat = 1.6 

    let translation = recognizer.translation(in: rView) 
    if let view = recognizer.view { 
     view.center = CGPoint(x:view.center.x + translation.x, y:view.center.y + translation.y) 
     view.transform = CGAffineTransform(rotationAngle: rotationAngle) 
    } 
    recognizer.setTranslation(CGPoint.zero, in: rView) 

    if recognizer.view?.center == CGPoint(x: 197.5, y: 232.5) { 
     PlaygroundPage.current.liveView = eeView 
    } 

これで問題が1.6 times 360それrotates576º bcにだということです。これは私がこれまでgesture recognizer機能で持っているものです。そしてそれはそれを一回だけ回転させ続けるのではありません。私はそれが絶えず回転するようにしたい。

誰かが助けを借りれば大いに感謝します。あまりにも事前にありがとう!

乾杯、 テオ

答えて

4

私は、私は完全にあなたが実装しようとしている機能を理解している場合はわかりません。ここでは、画像の回転を担当するUIViewサブクラスのサンプルを示します。遊び場にそれを実行する

class CustomView: UIView { 
    override init(frame: CGRect) { 
     super.init(frame: frame) 

     let panGR = UIPanGestureRecognizer(target: self, action: #selector(panGestureDetected(sender:))) 
     self.gestureRecognizers = [panGR] 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    var gestureBeginning: CGFloat = 0.0 

    func panGestureDetected(sender: UIPanGestureRecognizer) { 
     guard sender.numberOfTouches > 0 else { return } 

     let touchPoint = sender.location(ofTouch: 0, in: self) 

     switch sender.state { 
     case .began: 
      gestureBeginning = touchPoint.x 
      print("gestureBeginning: \(gestureBeginning)") 
     case .changed: 
      let progress = touchPoint.x - gestureBeginning 
      print("progress: \(progress)") 
      let rotationAngle: CGFloat = 1.6 * progress 
      let view = self.subviews[0] 
      let rads = rotationAngle * .pi/180 
      view.transform = CGAffineTransform(rotationAngle: rads) 
     default: 
      break 
     } 
    } 
} 

let imageView = UIImageView(image: #imageLiteral(resourceName: "image.png")) 
imageView.frame = CGRect(origin: CGPoint(x: 50.0, y: 50.0), size: CGSize(width: 150.0, height: 150.0)) 

let containerView = CustomView(frame: CGRect(origin: .zero, size: CGSize(width: 250.0, height: 250.0))) 
containerView.addSubview(imageView) 

PlaygroundPage.current.liveView = containerView 
PlaygroundPage.current.needsIndefiniteExecution = true 
関連する問題