UIButton的高亮狀態延遲問題
阿新 • • 發佈:2019-01-29
UIScrollView上的UIButton點選的時候沒有高亮狀態,但是確實觸發了點選事件,不過這樣會造成一個假象,給使用者看來UIButton沒有被點選的感覺。 但是要是長時間點選的話,則會高亮。於是我發現,導致這種現象應該就是時間長短的問題。順著這個問題想下去,就追尋到UIScrollView的touch原理,UIScrollView有一個delaysContentTouches的屬性
解決辦法
//delaysContentTouches 預設值為YES,即UIScrollView會在接受到手勢是延遲150ms來判斷該手勢是否能觸發UIScrollView的滑動事件;
//反之值為NO時,UIScrollView會立馬將接受到的手勢分發到子檢視上。即button在點選時會立即呈現高亮狀態
- (BOOL)delaysContentTouches {
return NO;
}
/**
delaysContentTouches設定為NO是遠遠不夠的,因為這樣的話你想要拖動UIScrollView而起點落在其它有手勢識別的檢視上是會拖不動的。 於是我們要過載touchesShouldCancelInContentView,此方法決定手勢是否取消傳遞到subView上,拖動UIScrollView時觸發。
*/
- (BOOL)touchesShouldCancelInContentView:(UIView *)view {
// 如果是button, 則點選button的時候不影響滑動
if ([view isKindOfClass:[UIButton class]]) {
return YES;
}
return [super touchesShouldCancelInContentView:view];
}