2017-10-14 73 views
0

我有當用戶需要進行選擇前一個按鈕將工作的視圖。爲了使這更明顯,我想有一個表示需要如果(變灰)按鈕第一次按下閃爍做選擇的元素。即我想指出,這是在該狀態下的錯誤,並導致用戶的注意,他們需要首先使用的UI元素。通過使UI元素指示錯誤閃爍

我目前的嘗試具有(在下面的代碼self.display)元素快速閃爍兩次如下:

@IBAction func inactiveButtonClick() { 
    let period = 0.16 

    UIView.animate(withDuration: period/2, delay: 0.0, options: [.curveEaseInOut, .autoreverse, .repeat], animations: { 
     self.display.alpha = 0 
    }, completion: { _ -> Void in 
     self.display.alpha = 1 
    }) 

    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + period*2, execute: { 
     self.display.layer.removeAllAnimations() 
    }) 

} 

這工作相當好,但並不感到100%正確的,動畫在完成之前有時會被截斷幾分之一秒。我想我可以排隊兩個動畫,但我不知道是否有完成這個更簡單的方法。有沒有什麼內置的方法讓UI元素閃爍來指示錯誤?如果不是,是否有任何曲線和頻率的「已知的良好」組合將這些傳達給用戶?

回答

1

關鍵幀動畫看起來像一個完美的結合在這樣的場景:

UIView.animateKeyframes(withDuration: period, delay: 0.0, options: [], animations: { 
    UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 0.5, animations: { 
     self.display.alpha = 0 
    }); 
    UIView.addKeyframe(withRelativeStartTime: 0.5, relativeDuration: 0.5, animations: { 
     self.display.alpha = 1 
    }); 
}, completion: nil); 

所以將首先創建一個週期的持續時間的關鍵幀動畫。裏面的動畫塊可以通過specifing相對開始時間添加自定義的關鍵幀動畫(0和1之間 - 1關鍵幀動畫的beign結束,所以你的持續時間)。

所以首先我們添加動畫啓動之初,其相對持續時間爲0.5的總動畫持續時間這麼1/2。第二個動畫將在第一個動畫完成1/2動畫時開始並繼續動畫時間的1/2。

希望這會有所幫助