2017-11-21 2 views
0

UIImageView가 화면을 가로 질러 이동하지만, 이미지의 위쪽이 모션 방향을 향하도록 이미지를 회전시키고 싶습니다.UIImageView를 이동 방향에 따라 회전하십시오.

func shootStar(backgroundImage: UIImageView){ 
    let screenSize = UIScreen.main.bounds 
    let screenHeight = screenSize.height 
    let screenWidth = screenSize.width 
    let star = UIImage(named: "Shooting Star") 
    let starView = UIImageView(image: star!) 

    starView.frame = CGRect(x: -40,y: screenHeight*0.05, width: 38.5, height: 42.8) 
    view.insertSubview(starView, aboveSubview: backgroundImage) 

    let toPoint:CGPoint = CGPoint(x: screenWidth + 80, y: screenHeight*0.3) 
    let fromPoint:CGPoint = CGPoint(x: -40, y: 40) 
    let movement = CABasicAnimation(keyPath: "position") 
    movement.isAdditive = true 
    movement.fromValue = NSValue(cgPoint: fromPoint) 
    movement.toValue = NSValue(cgPoint: toPoint) 
    movement.duration = 5 
    starView.layer.add(movement, forKey: "move") 
} 
+0

가능한 중복/questions/31421912/rotate-an-object-in-its-direction-of-motion) –

+0

이것은 UIImageViews가 아닌 스프라이트 –

+0

과 관련이 없습니다. 당신이 필요로하는 것은 회전 각 (zRotation)입니다. –

답변

1

귀하의 어려움이 여기에 아마 아이폰 OS는 직교 coordiantes하지만 ATAN2의 함수가 사용하지 않는다는 사실과 관련이있다. 다음은 각도를 계산하고 변환을 사용하여 이미지 뷰를 이동 방향으로 정렬하는 예제 놀이터입니다. 나는 UIView의의 변환 여기에 애니메이션,하지만 같은 원리를 사용하여 시스템의 CALayer의와 CAAnimations에 적용 좌표 해요 : (https://stackoverflow.com [운동의 방향으로 물체를 회전]의

import PlaygroundSupport 
import UIKit 

class V: UIViewController { 
    let imageView = UIImageView() 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     imageView.image = UIImage(named: "arrow up.jpg") 
     view.addSubview(imageView) 
    } 

    override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(animated) 
     imageView.sizeToFit() 
     imageView.center = view.center 
     let vector = CGVector(dx: 120, dy: 100) 
     let angle = atan2(vector.dy, vector.dx) - 1.5 * CGFloat.pi 
     print(angle/CGFloat.pi) 
     let rotationMatrix = CGAffineTransform(rotationAngle: angle) 
     self.imageView.transform = rotationMatrix 
     UIView.animate(withDuration: 5) { 
      self.imageView.center.x += vector.dx 
      self.imageView.center.y += vector.dy 
     } 

    } 
} 

PlaygroundPage.current.liveView = V() 
+0

이것은 여행 방향으로 회전하는데 완벽하게 작동합니다 –

관련 문제