我在一个4英寸大小的故事板中创建了这个动画。如果它适应让我们说iPhone 6,我怎么能确保比率保持不变。我不是在谈论自动布局或约束。我在下面添加了动画代码。 这是我想要的4英寸大小的方式,但同样,当我为iPhone 6调整大小时,除了动画本身外,一切看起来都很好。我该如何解决这个问题?
@IBAction func chimneySmoke(sender: UIButton) {
let smokeOne = UIImageView()
smokeOne.image = UIImage(named: "smoke1a")
smokeOne.frame = CGRect(x: -145, y: 160, width: 20, height: 20)
self.view.addSubview(smokeOne)
let randomXOffset = CGFloat( arc4random_uniform(40))
let path = UIBezierPath()
path.moveToPoint(CGPoint(x: 140,y: 172))
path.addCurveToPoint(CGPoint(x: 150 + randomXOffset, y: 0), controlPoint1: CGPoint(x: 158 + randomXOffset, y: 90), controlPoint2: CGPoint(x: 146 + randomXOffset, y: 60))
let anim = CAKeyframeAnimation(keyPath: "position")
anim.path = path.CGPath
anim.rotationMode = kCAAnimationRotateAuto
anim.duration = 9.0
smokeOne.layer.addAnimation(anim, forKey: "animate position along path")
}
答案 0 :(得分:1)
您可以通过将值设为百分比而不是硬编码来实现此目的。为此,您需要一个小数乘以frame.width
或frame.height
。你的分数,如果你有基本单位(即你在320×640的屏幕上开发),应该是你想要的值除以那个方向的长度。例如,如果您的屏幕宽度为320并且您想要点145,那么该值将为145 / 320 * frame.width
,因此当您的屏幕宽度变得不同时(假设iPad为768点),该点仍将位于相同位置屏幕百分比。
smokeOne.frame = CGRect(x: -145 / 320 * frame.width, y: 160 / 640 * frame.height, width: 20 / 320 * frame.width, height: 20 / 640 * frame.height)