Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 法登;启用用户交互的淡出UISlider_Ios_Swift_Animation_Alpha_Uislider - Fatal编程技术网

Ios 法登;启用用户交互的淡出UISlider

Ios 法登;启用用户交互的淡出UISlider,ios,swift,animation,alpha,uislider,Ios,Swift,Animation,Alpha,Uislider,我使用UISlider创建了一个视频持续时间线。它工作得很好;我可以改变滑块的值。然后,我尝试添加一个视觉(淡入淡出),所以当用户点击屏幕时,滑块淡入淡出,如果没有其他交互,滑块淡入淡出 为了实现淡入淡出效果,我在0-1之间调整了alpha。但是,ios显然不接受alpha 0.5下元素的用户交互。因此,我无法用纯animateWithDuration实现这一点,因此我尝试添加一个计数秒数的计数器 (更新:显然,我想要实现的是,我有一个全屏视频,我想放置一个滑块来显示视频时间(当前时间+持续时间

我使用UISlider创建了一个视频持续时间线。它工作得很好;我可以改变滑块的值。然后,我尝试添加一个视觉(淡入淡出),所以当用户点击屏幕时,滑块淡入淡出,如果没有其他交互,滑块淡入淡出

为了实现淡入淡出效果,我在0-1之间调整了alpha。但是,ios显然不接受alpha 0.5下元素的用户交互。因此,我无法用纯
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上启用用户交互来适应淡入淡出的正确方法是什么?

这些简单的步骤可以做到:

  • 当用户点击以显示滑块时,设置一个5秒计时器(并相当快地设置滑块淡入动画,例如0.3秒)。[一个很好的变化可能是淡入滑块并在动画的完成处理程序中启动计时器。]

  • 在滑块的值更改操作中,使计时器无效/取消,并创建一个新的5秒计时器。(如果用户从未更改滑块,则不会执行此步骤。但这很好;已经有计时器在运行。)

  • 不管怎样,你都有一个计时器在运行,它最终会启动(要么是你淡入后的5秒,要么是用户上次更改滑块后的5秒)。当计时器启动时,将滑块淡出。全部完成


  • 当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)
        }