最近寫 ios TableView 加入長(zhǎng)按的手勢(shì)后,希望在 cell 長(zhǎng)按彈窗的同時(shí)加入震動(dòng)反饋效果。
查詢后發(fā)現(xiàn)一個(gè)可用的震動(dòng)方法:
1.導(dǎo)入 #import<AudioToolbox/AudioToolbox.h>
2.調(diào)用 AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
這樣就可以實(shí)現(xiàn)震動(dòng)。
但震動(dòng)很暴力,力度大,時(shí)間大概1s。感受很差。個(gè)人覺(jué)得像 twitter 上點(diǎn)贊那種震動(dòng)感覺(jué),或者像 iphone7 home 鍵的震動(dòng)反饋,或者系統(tǒng)自帶的 DatePicker 翻動(dòng)時(shí)的觸感都很棒。
后來(lái)發(fā)現(xiàn)上面函數(shù)可以傳入其他參數(shù)來(lái)達(dá)到輕微震動(dòng)效果:
// 普通短震,3D Touch 中 Peek 震動(dòng)反饋
AudioServicesPlaySystemSound(1519);
// 普通短震,3D Touch 中 Pop 震動(dòng)反饋
AudioServicesPlaySystemSound(1520);
// 連續(xù)三次短震
AudioServicesPlaySystemSound(1521);
注意:這里調(diào)用的是非公開 API。
另外 ios10 后加入的 UIImpactFeedbackGenerator ,提供了更好的震動(dòng)效果。
調(diào)用也很簡(jiǎn)單:
UIImpactFeedbackGenerator*impactLight = [[UIImpactFeedbackGeneratoralloc]initWithStyle:UIImpactFeedbackStyleLight];
[impactLight impactOccurred];
震動(dòng)有多個(gè)模式可選。
typedefNS_ENUM(NSInteger, UIImpactFeedbackStyle) {
UIImpactFeedbackStyleLight,
UIImpactFeedbackStyleMedium,
UIImpactFeedbackStyleHeavy
};
注意:UIImpactFeedbackGenerator 只在 iphone7 后手機(jī)才會(huì)產(chǎn)生震動(dòng)。