我以编程方式在我的 View 中添加了一个 UISlider。此外,添加了 sliderValueDidChange
函数以观察 slider 的变化。
var durationSlider: UISlider!
override func viewDidLoad() {
super.viewDidLoad()
durationSlider = UISlider(frame:CGRectMake(0, 600, self.view.bounds.width, 20))
durationSlider.minimumValue = 0
durationSlider.maximumValue = 100
durationSlider.continuous = true
// durationSlider.alpha = 0
durationSlider.tintColor = UIColor.redColor()
durationSlider.value = 0
durationSlider.addTarget(self, action: "sliderValueDidChange:", forControlEvents: .ValueChanged)
self.view.addSubview(durationSlider)
}
func sliderValueDidChange(sender:UISlider!) {
print("value--\(sender.value)")
}
直到这里,一切都像魅力一样运作,我完美地获得了 UISlider 上的值(value)变化。
但是,只要我添加 durationSlider.alpha = 0
,并在我的 viewDidLoad()
中使用类似这样的内容:
viewDidLoad() {
...
let tapGestureRecognizer: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "handleTapGestureRecognizer:")
tapGestureRecognizer.numberOfTapsRequired = 1
self.player.view.addGestureRecognizer(tapGestureRecognizer)
}
func handleTapGestureRecognizer(gestureRecognizer: UIGestureRecognizer) {
UIView.animateWithDuration(1, delay: 1.5, options: [], animations: {
self.durationSlider.alpha = 1.0
}, completion: nil)
UIView.animateWithDuration(1.0, delay: 1.5, options: [], animations: {
self.durationSlider.alpha = 0
}, completion: nil)
}
此时,我有两个问题。
1) UISlider 立即淡入(没有任何持续时间或延迟,就好像我直接使用了 alpha = 1
- 没有使用 animateWithDuration),而它很好地淡出。
2) 如果我在 viewDidLoad 中使用 alpha = 0
,UISlider 不会触发 sliderValueDidChange
。但是,如果我尝试 alpha = 1
,sliderValueDidChange
会按预期工作。
更新代码:
这行不通。
func handleTapGestureRecognizer(gestureRecognizer: UIGestureRecognizer) {
UIView.animateWithDuration(0.2, delay: 0.4, options: [UIViewAnimationOptions.AllowUserInteraction], animations: {
self.durationSlider.alpha = 1.0
}, completion: {completed in
UIView.animateWithDuration(2.0, delay: 2.0, options: [], animations: {
self.durationSlider.alpha = 0
}, completion: nil)
})
}
但是,这是可行的:
UIView.animateWithDuration(0.2, delay: 0.4, options: [UIViewAnimationOptions.AllowUserInteraction], animations: {
self.durationSlider.alpha = 1.0
}, completion: nil)
我想要实现的是一个带有 UISlider 的视频持续时间 Controller ,所以我想在用户点击屏幕时显示它,使其可以进行交互,如果用户在 x 秒内没有交互,隐藏它。
最佳答案
如果我没记错的话,当 alpha < 0.5 时控件会被禁用。
您的动画代码有误。您有两个具有相同持续时间和相同延迟的动画。它们同时运行,这是错误的。您需要这样做,以便第二个使用延迟,该延迟是延迟和前一个动画持续时间的总和。 (因此,如果第一个动画的延迟为 1,持续时间为 1.5,则您要为第二个动画设置 1.0 + 1.5 = 2.5 的延迟,因此它会在第一个动画结束后立即开始。
或者,您可以将第二个动画放在第一个动画的完成 block 中,延迟为 0,这样它会在第一个动画完成后立即开始。
关于ios - 如果在 viewDidLoad 中将 Alpha 设置为 0 然后淡入,则 UISlider 不会被选中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34445735/