Я хочу повернуть 3 разных изображения в разные места на 360 градусов в swift 4 с помощью UIBezierPath - PullRequest
0 голосов
/ 10 мая 2018

Я хочу повернуть 3 разных изображения в разных местах на 360 градусов в swift 4, используя UIBezierPath. Я могу переместить одно изображение, как это на изображении. с этим кодом

import UIKit

class ViewController: UIViewController {

 override func viewDidLoad() {
    super.viewDidLoad()

    let circlePath = UIBezierPath(arcCenter: CGPoint(x: view.frame.midX, y: view.frame.midY), radius: 120, startAngle: 0, endAngle:CGFloat(Double.pi)*2, clockwise: true)

    let animation = CAKeyframeAnimation(keyPath: "position");
    animation.duration = 5
    animation.repeatCount = MAXFLOAT
    animation.path = circlePath.cgPath

    let moon = UIImageView()
    moon.frame = CGRect(x:0, y:0, width:40, height:40);
    moon.image = UIImage(named: "moon.png")
    view.addSubview(moon)
    moon.layer.add(animation, forKey: nil)



 }

}

, и я хочу повернуть 3 разных изображения на разные угол и положение, как это. iхочу повернуть все 3 разных изображения, как на этом

Любой, кто может обновить мой код в соответствии с изображением выше, я хочу Спасибо за предварительные поздравления!:).

1 Ответ

0 голосов
/ 10 мая 2018

Я попробовал с вашим кодом и он работает. Я сделал функцию для поворота imageView.

func startMovingAView(startAnlge: CGFloat, endAngle: CGFloat) {

        let circlePath = UIBezierPath(arcCenter: CGPoint(x: view.frame.midX, y: view.frame.midY), radius: 120, startAngle: startAnlge, endAngle:endAngle, clockwise: true)

        let animation = CAKeyframeAnimation(keyPath: "position");
        animation.duration = 5
        animation.repeatCount = MAXFLOAT
        animation.path = circlePath.cgPath

        let moon = UIImageView()
        moon.frame = CGRect(x:0, y:0, width:40, height:40);
        moon.image = UIImage(named: "moon.png")
        view.addSubview(moon)
        moon.layer.add(animation, forKey: nil)
 }

А вот углы, которые я передаю для каждого imageView:

/// For first imageView
var startAngle: CGFloat = 0.0
var endAngle: CGFloat = CGFloat(Double.pi) * 2.0
startMovingAView(startAnlge: startAngle, endAngle: endAngle)

/// For second imageView   
startAngle = CGFloat(Double.pi/2.0)
endAngle = CGFloat(Double.pi) * 2.5
startMovingAView(startAnlge: startAngle, endAngle: endAngle)

/// For third imageView  
startAngle = CGFloat(Double.pi)
endAngle = CGFloat(Double.pi) * 3.0
startMovingAView(startAnlge: startAngle, endAngle: endAngle)

Нам просто нужно найти углы с одинаковой разностью, чтобы за 5 секунд длительность imageView должна была пройти одинаковое расстояние, чтобы все объекты двигались с постоянной и одинаковой скоростью.

...