gpt4 book ai didi

swift - 根据行进方向旋转 UIImageView

转载 作者:行者123 更新时间:2023-11-30 11:59:36 26 4
gpt4 key购买 nike

我有一个在屏幕上移动的 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")
}

最佳答案

这里的困难可能与 iOS 不使用笛卡尔坐标但 atan2 函数有关。下面是一个示例,说明如何计算角度并使用变换将 ImageView 与行进方向对齐。我在这里使用 UIView 变换和动画,但相同的原理和坐标系也适用于 CALayer 和 CAAnimations:

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()

关于swift - 根据行进方向旋转 UIImageView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47412039/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com