每次单击按钮时将 UIButton 旋转 90 度
Posted
技术标签:
【中文标题】每次单击按钮时将 UIButton 旋转 90 度【英文标题】:Rotating a UIButton by 90 degrees every time the button is clicked 【发布时间】:2016-08-19 17:55:49 【问题描述】:如何在并跟踪每个旋转的位置/角度?
这是我到目前为止的代码,但它只旋转一次:
@IBAction func gameButton(sender: AnyObject)
UIView.animateWithDuration(0.05, animations: (
self.gameButtonLabel.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
))
【问题讨论】:
【参考方案1】:self.gameButtonLabel.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
应该改为
// Swift 3 - Rotate the current transform by 90 degrees.
self.gameButtonLabel.transform = self.gameButtonLabel.transform.rotated(by: CGFloat(M_PI_2))
// OR
// Swift 2.2+ - Pass the current transform into the method so it will rotate it an extra 90 degrees.
self.gameButtonLabel.transform = CGAffineTransformRotate(self.gameButtonLabel.transform, CGFloat(M_PI_2))
使用CGAffineTransformMake...
,您可以创建一个全新的转换并覆盖按钮上已有的任何转换。由于您想将 90 度附加到已经存在的变换(可能已经旋转了 0、90 等度),因此您需要添加到当前变换。我给出的第二行代码就可以做到这一点。
【讨论】:
Swift 3 版本报错:'CGAffineTransform' 类型的值没有成员'rotated' 并且 Swift 2.2+ 版本报错:调用中有额外参数 嗯。你在哪个 Xcode 测试版上?他们不断更改我所有的方法名称。我认为我发布的代码来自 Xcode 8 beta 5。 我还没有升级到 Xcode 8 beta。我目前正在使用 Xcode 7.3.1,但在编写代码时仍然会从 Xcode 获得 Swift 3 自动更正建议。 我创建了一个新项目,在视图中放置了一个按钮,并将一个动作连接到该按钮。该按钮的操作是这行代码:sender.transform = CGAffineTransformRotate(sender.transform, CGFloat(M_PI_2))
。它可以满足您的需求。我无法在调用错误中获得 Extra 参数。此代码在 Xcode 7.3.1/Swift 2.2 和 Xcode 8 beta 6/Swift 2.3 上运行。我还验证了我提供的 Swift 3 代码适用于 Xcode 8 beta 6/Swift 3。
Yessss 哈哈谢谢你这么多的人。我非常感谢您的所有努力并不断回复。我已经赞成你的回答。让我知道我是否可以为你做任何其他事情作为回报。谢谢【参考方案2】:
斯威夫特 4:
@IBOutlet weak var expandButton: UIButton!
var sectionIsExpanded: Bool = true
didSet
UIView.animate(withDuration: 0.25)
if self.sectionIsExpanded
self.expandButton.transform = CGAffineTransform.identity
else
self.expandButton.transform = CGAffineTransform(rotationAngle: -CGFloat.pi / 2.0)
@IBAction func expandButtonTapped(_ sender: UIButton)
sectionIsExpanded = !sectionIsExpanded
【讨论】:
最佳答案!以上是关于每次单击按钮时将 UIButton 旋转 90 度的主要内容,如果未能解决你的问题,请参考以下文章
在 UIButton 中,setImage 和 setBackgroudnImage 的内容 id 不同,它旋转了 90 度