2015-12-24 16 views
0

我在我看來,編程添加一個UISlider。此外,添加了sliderValueDidChange的功能以觀察滑塊上的更改。UISlider沒有得到選擇如果Alpha是在viewDidLoad中置0,然後漸強

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值的變化。


但是,只要我添加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) 
} 

在這一點上,我有2個問題。 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,所以我想,當用戶在屏幕上輕擊以使它顯示它可用於交互,並且如果用戶在x秒內未進行交互,請將其隱藏。

回答

1

如果我沒有記錯,當他們的alpha值爲< 0.5時,控件被禁用。

您的動畫代碼是錯誤的。您有兩個動畫具有相同的持續時間和相同的延遲。他們都在同一時間運行,這是錯誤的。您需要這樣做,因此第二個使用延遲和前一個動畫持續時間的總和。 (因此,如果第一個動畫的延遲爲1,持續時間爲1.5,則要給第二個動畫延遲1.0 + 1.5 = 2.5,以便在第一個動畫結束後開始。

或者,你能儘快把第二動畫完成塊中的第一爲0的延遲,它開始作爲第一個動畫完成。

+0

我嘗試了你的方法。現在動畫視覺看起來不錯,但是。但是,我仍然有第二個問題。當我最初在viewDidLoad中將alpha設置爲0時,我無法與滑塊交互。我也嘗試在'self.view.addSubview(durationSlider)'之前將alpha設置爲1,並在此之後將alpha設置爲1(在'self.view.addSubview(durationSlider)'之後)。在這兩種情況下,UISlider都是不可選擇/可交互的。 – senty

+1

默認情況下,在嘗試使用帶有選項參數並添加UIViewAnimationOptionAllowUserInteraction的animateWithDuration表單時禁用用戶交互。 –

+0

更新:我在選項中添加了[UIViewAnimationOption.AllowUserInteraction],但它仍然不讓我插入滑塊:/ – senty

1

我認爲這是預期的行爲。 Alpha 0表示用戶看不到它,因此不與其進行交互。我看到一個類似的帖子here。另請嘗試鏈接動畫。

func handleTapGestureRecognizer(gestureRecognizer: UIGestureRecognizer) { 
    UIView.animateWithDuration(1, delay: 1.5, options: [], animations: { 
     self.durationSlider.alpha = 1.0 
    }, completion: { completed in 
     UIView.animateWithDuration(1.0, delay: 1.5, options: [], animations: { 
      self.durationSlider.alpha = 0 
     }, completion: nil) 
    } 
} 
+0

好,但如果你在'handleTapGestureRecognizer看看()',我褪色它在,並設置爲1.0的alpha。我認爲你沒有仔細閱讀我的朋友 – senty

+1

更新我的答案。不知道爲什麼投票。 –

+0

感謝您的編輯。但是,這一次'',完成:{'位,我得到一個錯誤'不能轉換類型的值'() - > Void'到期望的參數類型'((Bool) - > Voi d)?' – senty