按下时如何使 UIButton 收缩为 UIActivityIndicator?
Posted
技术标签:
【中文标题】按下时如何使 UIButton 收缩为 UIActivityIndicator?【英文标题】:How to Make an UIButton Shrink Into an UIActivityIndicator When Pressed? 【发布时间】:2019-12-02 17:47:58 【问题描述】:我正在尝试创建一个 UIButton,当点击它时它会缩小为一个活动指示器。我所指的 UIButton 名为 Request Ride。我已经设置了大部分代码,但是由于某种原因按钮不会缩小并且指示器不会显示?我会附上应用的图片和我的代码。
// 我的应用
// 我需要的最终结果
// 主故事板
// HomeVC
@IBAction func actionBtnWasPressed(_ sender: Any)
actionBtn.animateButton(shouldLoad: true, withMessage: nil)
// 圆形阴影按钮
class RoundedShadowButton: UIButton
// Variables
var originalSize: CGRect?
func setupView()
originalSize = self.frame
self.layer.cornerRadius = 5.0
self.layer.shadowRadius = 10.0
self.layer.shadowColor = UIColor.darkGray.cgColor
self.layer.shadowOpacity = 0.3
self.layer.shadowOffset = CGSize.zero
override func awakeFromNib()
setupView()
func animateButton(shouldLoad: Bool, withMessage message: String?)
let spinner = UIActivityIndicatorView()
spinner.style = .large
spinner.color = UIColor.darkGray
spinner.alpha = 0.0
spinner.hidesWhenStopped = true
spinner.tag = 21
if shouldLoad
self.addSubview(spinner)
self.setTitle("", for: .normal)
UIView.animate(withDuration: 0.2, animations:
self.layer.cornerRadius = self.frame.height / 2
self.frame = CGRect(x: self.frame.midX - (self.frame.height / 2), y: self.frame.origin.y, width: self.frame.height, height: self.frame.height)
) (finished) in
if finished == true
spinner.startAnimating()
spinner.center = CGPoint(x: self.bounds.width / 2 + 1, y: self.bounds.width / 2 + 1)
UIView.animate(withDuration: 0.2)
spinner.alpha = 1.0
self.isUserInteractionEnabled = false
else
self.isUserInteractionEnabled = true
for subview in self.subviews
if subview.tag == 21
subview.removeFromSuperview()
UIView.animate(withDuration: 0.2)
self.layer.cornerRadius = 5.0
self.frame = self.originalSize!
self.setTitle(message, for: .normal)
【问题讨论】:
邮政编码而不是图片。 @MojtabaHosseini 我编辑了帖子以添加我的代码:) 【参考方案1】:一个明显的事情是这条线是完全错误的:
spinner.center = CGPoint(x: self.frame.width / 2 + 1, y: self.frame.width / 2 + 1)
您错误地放置了微调器。如果活动视图是按钮的子视图,那么它需要居中在按钮的 bounds 中间,而不是它的框架。
我得到的效果有点像你描述的:
所以如果你的价值观正确,这应该是可能的。
【讨论】:
我该如何解决这个问题? 我明白,但这是我第一次以编程方式执行活动指示器 添加了“截屏视频”,表明一个人可能可以做你想做的事情。 K 我将边界添加到微调器中心,接下来我需要修复什么?以上是关于按下时如何使 UIButton 收缩为 UIActivityIndicator?的主要内容,如果未能解决你的问题,请参考以下文章
按下时将 UIbutton 添加为子视图无法调用 Selector
按下时更改图像的 UIButton - 但更改图像时效果不佳
按下时使用 UIViewAnimationTransitionFlipFromRight 翻转 UIButton 并在“另一侧”显示新按钮