Ios 法登;启用用户交互的淡出UISlider
我使用UISlider创建了一个视频持续时间线。它工作得很好;我可以改变滑块的值。然后,我尝试添加一个视觉(淡入淡出),所以当用户点击屏幕时,滑块淡入淡出,如果没有其他交互,滑块淡入淡出 为了实现淡入淡出效果,我在0-1之间调整了alpha。但是,ios显然不接受alpha 0.5下元素的用户交互。因此,我无法用纯Ios 法登;启用用户交互的淡出UISlider,ios,swift,animation,alpha,uislider,Ios,Swift,Animation,Alpha,Uislider,我使用UISlider创建了一个视频持续时间线。它工作得很好;我可以改变滑块的值。然后,我尝试添加一个视觉(淡入淡出),所以当用户点击屏幕时,滑块淡入淡出,如果没有其他交互,滑块淡入淡出 为了实现淡入淡出效果,我在0-1之间调整了alpha。但是,ios显然不接受alpha 0.5下元素的用户交互。因此,我无法用纯animateWithDuration实现这一点,因此我尝试添加一个计数秒数的计数器 (更新:显然,我想要实现的是,我有一个全屏视频,我想放置一个滑块来显示视频时间(当前时间+持续时间
animateWithDuration
实现这一点,因此我尝试添加一个计数秒数的计数器
(更新:显然,我想要实现的是,我有一个全屏视频,我想放置一个滑块来显示视频时间(当前时间+持续时间)。我想将滑块最初设置为不可见,当用户点击屏幕时,滑块变为可见。然后,用户在滑块上进行交互。但是,我想使滑块在上次点击后5秒后淡出。)
我试过的
var durationSlider: UISlider!
var timer = NSTimer()
var counter = 0
override func viewDidLoad() {
super.viewDidLoad()
durationSlider.minimumValue = 0
durationSlider.maximumValue = 100
durationSlider.continuous = true
durationSlider.alpha = 0
durationSlider.addTarget(self, action: "sliderValueDidChange:", forControlEvents: .ValueChanged)
self.view.addSubview(durationSlider)
let tapGestureRecognizer: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "handleTapGestureRecognizer:")
tapGestureRecognizer.numberOfTapsRequired = 1
self.player.view.addGestureRecognizer(tapGestureRecognizer)
}
func scheduledTimerWithTimeInterval(){
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("updateCounting"), userInfo: nil, repeats: true)
}
func updateCounting(){
counter = counter + 1
}
在这里之前,一切都很好,如果我只使用淡入,甚至不用计数器,它就可以工作
func handleTapGestureRecognizer(gestureRecognizer: UIGestureRecognizer) {
UIView.animateWithDuration(0.2, delay: 0.2, options: [UIViewAnimationOptions.AllowUserInteraction], animations: {
self.durationSlider.alpha = 1.0
print("B")
}, completion: nil)
}
从这里开始解决问题 如果我尝试在完成中使用淡出,它会直接进入完成闭包内部,因此它甚至不会给我一秒钟的时间来与滑块交互(alpha<5) 当然,我们也尝试将它们分为两个单独的函数,但这会更迅速地更改打印日志(因此alpha):
UIView.animateWithDuration(0.2, delay: 0.4, options: [UIViewAnimationOptions.AllowUserInteraction], animations: {
self.durationSlider.alpha = 1.0
print("B")
}, completion: nil)
UIView.animateWithDuration(2.0, delay: 10.0, options: [], animations: {
print("A")
self.durationSlider.alpha = 0
}, completion: nil)
最后,设置计时器的想法突然出现在我的脑海中,所以我尝试了类似的方法,但也没有运气。它启动计数器,然后它上升,但我认为这个逻辑在这里不起作用,因为它永远不会进入那个状态
func handleTapGestureRecognizer(gestureRecognizer: UIGestureRecognizer) {
counter = 0
scheduledTimerWithTimeInterval()
UIView.animateWithDuration(0.2, delay: 0.2, options: [UIViewAnimationOptions.AllowUserInteraction], animations: {
self.durationSlider.alpha = 1.0
print("B")
}, completion: nil)
if counter > 6 {
UIView.animateWithDuration(2.0, delay: 5.0, options: [], animations: {
print("A")
self.durationSlider.alpha = 0
}, completion: nil)
}
实现我想要实现的目标的最佳方式是什么?通过在UISlider上启用用户交互来适应淡入淡出的正确方法是什么?这些简单的步骤可以做到:
当alpha值小于0.01时,ios不接受交互。您至少可以在
下接收值大于0.02的触摸,直到这里,所有操作都可以正常运行{
我正在将alpha设置为1,它正在按照我的预期工作。你是什么意思?我想从0开始alpha,点击将其更改为1,如果在6秒钟内没有交互,则消失(alpha返回到0)“实现我想要的目标的最佳方式是什么?”目前还不清楚您想要实现什么。与其引用所有不“工作”的代码(无论这意味着什么),请准确描述您想要实现的内容。“无交互”关于什么?你是说如果用户滑动滑块,你希望滑块淡入淡出吗?如果用户滑动滑块,你希望滑块淡出淡出吗?如果用户不滑动滑块,怎么办?如果滑块不可见,用户如何调用滑块?准确解释你想要的,涵盖所有情况。我想实现的是,我有一个全屏视频,我想放置一个滑块来显示视频时间(当前时间+持续时间)。我想先将滑块设置为“不可见”,当用户点击屏幕时,滑块变为可见。然后,用户在滑块上进行交互。但是,我想使滑块在上次点击后5秒后淡出。我的CancelableTimer类可能会帮到你:它做的事情不多,你不能用NSTimer完成,但我可以而且更容易管理。
func handleTapGestureRecognizer(gestureRecognizer: UIGestureRecognizer) {
counter = 0
scheduledTimerWithTimeInterval()
UIView.animateWithDuration(0.2, delay: 0.2, options: [UIViewAnimationOptions.AllowUserInteraction], animations: {
self.durationSlider.alpha = 1.0
print("B")
}, completion: nil)
if counter > 6 {
UIView.animateWithDuration(2.0, delay: 5.0, options: [], animations: {
print("A")
self.durationSlider.alpha = 0
}, completion: nil)
}