【发布时间】:2017-09-04 19:04:35
【问题描述】:
单击按钮时,我试图从底部带来一个子视图。但只有第一次按钮是可点击的。对于动画按钮后的第二次点击是不可点击的。
这里是代码。
class AnimateView: UIView {
var button: UIButton!
var menuView: UIView!
var mainView: UIView!
override init(frame: CGRect) {
super.init(frame: frame)
mainView = UIView(frame: CGRect(x: 0, y: 0, width:
self.frame.size.width, height: self.frame.size.height))
mainView.clipsToBounds = true
mainView.backgroundColor = .clear
mainView.isUserInteractionEnabled = true
mainView.isExclusiveTouch = true
self.addSubview(mainView)
let theRect = CGRect(x: self.frame.size.width / 2 - 44 / 2, y: 0,
width: 44, height: 44)
button = UIButton(frame: theRect)
check.layer.cornerRadius = btnView.frame.size.height / 2
mainView.addSubview(self.check)
mainView.bringSubview(toFront: check)
check.addTarget(self, action: #selector(buttonClick(_:)),
for:.touchUpInside)
let newRect = CGRect(x: 0, y: check.frame.height, width:
self.frame.size.width, height: self.mainView.frame.size.height)
menuView = UIView(frame: newRect)
menuView.backgroundColor = .blue
mainView.addSubview(menuView)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func buttonClick(_ sender: UIButton) {
toggleMenu()
}
func toggleMenu() {
if check.transform == CGAffineTransform.identity {
UIView.animate(withDuration: 1, animations: {
self.check.transform = CGAffineTransform(scaleX: 12, y: 12)
self.mainView.transform = CGAffineTransform(translationX: 0, y: -120)
self.check.transform = CGAffineTransform(rotationAngle: self.radians(180)) // 180 is 3.14 radian
self.setNeedsLayout()
}) { (true) in
UIView.animate(withDuration: 0.5, animations: {
})
}
} else {
UIView.animate(withDuration: 1, animations: {
// .identity sets to original position
//self.btnView.transform = .identity
self.mainView.transform = .identity
self.button.transform = .identity
})
}
}
}
这个类是从另一个这样的 UIView 类调用的
class MainViewClass: UIView {
var animateView: AnimateView!
override init(frame: CGRect) {
animateView = AnimateView(frame: CGRect(x: 0, y: self.frame.size.height - 44 - 44 - 20, width: self.frame.size.width, height: 122+44))
//animateView.clipsToBounds = true
self.addSubview(animateView)
self.bringSubview(toFront: animateView)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
屏幕首次出现时:
现在该按钮不可点击。当我看到按钮的框架时,它与屏幕最初出现时按钮触摸屏幕底部时相同,即使它向上移动。 我的意图是在单击按钮时从底部显示带有动画的屏幕,并在第二次单击时移动到默认位置。
但是,如果我将按钮作为子视图放置在 self 中,而不是作为 mainView 的子视图,则该按钮是可点击的,但即使在视图被动画化并向上移动后,它仍保持在相同的位置。
self.addSubview(按钮)
【问题讨论】:
-
您是否需要在完成动画后删除您的
AnimateView,以便再次显示按钮? -
首先当按钮被点击时,子视图应该从屏幕底部开始动画并且按钮也应该向上移动。然后第二次单击该按钮应与子视图一起下降。现在,当单击按钮时,子视图会向上动画,并且按钮的按钮不可单击。
-
当按钮被点击并向上移动时,它是不可点击的。虽然我尝试更新它的框架,但它无法点击。