Swift3에서 9시를 기점으로 시계를 드래그로 회전시킨다

12924 단어 XcodeSwiftXcode8swift3
시계의 바늘이 정확히 9시를 기점으로 UIView를 드래그하여 회전시켜 보겠습니다. 회전의 간이 되고 있는 곳은 atan2(target.y-position.y, target.x-position.x) 이 부분입니다. atan2 에서 좌표에서 각도를 계산합니다.



구현


var myView: UIView!
    override func viewDidLoad() {
        super.viewDidLoad()
        myView = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 20))
        myView.center = self.view.center
        myView.backgroundColor = UIColor.red;        self.view.addSubview(myView)
        myView.layer.anchorPoint = CGPoint(x: 1.0, y: 0.5)

        let box = UIView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
        box.backgroundColor = UIColor.blue
        myView.addSubview(box)
    }

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent!) {

        let touch = touches.first!
        if touch.view === myView.subviews[0] {
            let position = touch.location(in: self.view)
            let target = myView.center
            let angle = atan2(target.y-position.y, target.x-position.x)
            myView.transform = CGAffineTransform(rotationAngle: angle)
        }


설명



UIView 인스턴스화
var myView: UIView!

UIView의 실태를 만들어 그리기

//横幅100の縦幅20のUIView
myView = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 20))    //viewの真ん中に配置する
        myView.center = self.view.center
        //UIViewの全体の背景色を赤色に指定する
        myView.backgroundColor = UIColor.red;   
        //画面に描画する
        self.view.addSubview(myView)
        //anchorPointに関して下記参照
        //要は(x: 1.0, y: 0.5)にすることで
        //UIViewの最下部を原点に回転させることができる
        //これを(x: 0.5, y: 0.5)とかにするとブーメランみたいに回ってしまう
        myView.layer.anchorPoint = CGPoint(x: 1.0, y: 0.5)

        //青い部分
        let box = UIView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
        box.backgroundColor = UIColor.blue
        myView.addSubview(box)

드래그 처리 구현
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent!) {
        //タッチイベント取得
        let touch = touches.first!
        //青い部分をタッチしたときだけ回転させることができる
        if touch.view === myView.subviews[0] {
            //自分の場所を取得して
            let position = touch.location(in: self.view)
            //真ん中を取得して
            let target = myView.center
            //中心点から自分xと自分yを引き算
            let angle = atan2(target.y-position.y, target.x-position.x)
           //transformで回転処理を実行する
            myView.transform = CGAffineTransform(rotationAngle: angle)
        }

참고



anchorPoint에 관해서는 아래 참조

How to rotate an UIImageView using TouchesMoved

Swift3에서 시계를 돌리도록 드래그하여 빙글빙글 회전시켜 본다

좋은 웹페이지 즐겨찾기