震動(dòng)反饋(UIFeedbackGenerator)

鬧鐘滑動(dòng)時(shí)間的震動(dòng)反饋.png
震動(dòng)反饋是iOS 10之后出的新特性,相比于之前的系統(tǒng)震動(dòng)
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
要友好得多,沒有聲音,震動(dòng)幅度適中,不需要設(shè)置里“響鈴模式震動(dòng)”打開。這也是Apple更推薦開發(fā)者使用的反饋震動(dòng)。
e.g. Switch控件滑動(dòng),時(shí)鐘里選時(shí)間滑動(dòng),產(chǎn)生的震動(dòng)都是UIFeedbackGenerator特性的。
現(xiàn)在“震動(dòng)反饋”的應(yīng)用是非常廣的 —— 下拉刷新;點(diǎn)擊重要的Button;選擇器等等。都可以加上反饋。
Apple文檔(UIFeedbackGenerator)
//
// UIImpactFeedbackGenerator.h
// UIKit
//
// Copyright ? 2016 Apple Inc. All rights reserved.
//
#import <UIKit/UIFeedbackGenerator.h>
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSInteger, UIImpactFeedbackStyle) {
UIImpactFeedbackStyleLight,
UIImpactFeedbackStyleMedium,
UIImpactFeedbackStyleHeavy
};
// UIImpactFeedbackGenerator is used to give user feedback when an impact between UI elements occurs
UIKIT_CLASS_AVAILABLE_IOS_ONLY(10_0) @interface UIImpactFeedbackGenerator : UIFeedbackGenerator
- (instancetype)initWithStyle:(UIImpactFeedbackStyle)style;
/// call when your UI element impacts something else
- (void)impactOccurred;
@end
想要用震動(dòng)反饋也特別簡單:
UIImpactFeedbackGenerator *feedBackGenertor = [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleMedium];
[feedBackGenertor impactOccurred];
注意:“UIImpactFeedbackGenerator' is only available on iOS 10.0 or newer”,使用的時(shí)候加上版本限制。**
手機(jī) -- 設(shè)置 -- 聲音與觸感 -- 系統(tǒng)觸感反饋(打開)

系統(tǒng)觸感反饋.png
此前系統(tǒng)震動(dòng)AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
在iOS 10之前,系統(tǒng)震動(dòng)采用的是震動(dòng)+鈴聲的模式,目前看來是及其不友好的,首先震動(dòng)略大,其次帶聲音,體驗(yàn)并不好。但這種的方式可以自定義音效。
Apple文檔(AudioServicesPlaySystemSound)
#import <AudioToolbox/AudioToolbox.h>
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
注意:手機(jī) -- 設(shè)置 -- 聲音與觸感 -- 響鈴模式震動(dòng)(打開)

響鈴模式震動(dòng).png