iOS MJRefresh增加震动反馈

释放双眼,带上耳机,听听看~!
MJRefresh增加震动反馈发现有的app在下拉刷新的时候有一下震动反馈,感觉用户体验很棒,所以想在现有的项目中也增加一个这样的效果。但是项目中使用的 MJRefresh 并没有提供这样的接口,自己重新实现下拉刷新也不现实。

既然如此就需要手动去监听下拉的状态改变。

MJRefresh中刷新控件的基类MJRefreshComponent有一个state属性,是一个枚举:

/** 刷新控件的状态 */
typedef NS_ENUM(NSInteger, MJRefreshState) {
    /** 普通闲置状态 */
    MJRefreshStateIdle = 1,
    /** 松开就可以进行刷新的状态 */
    MJRefreshStatePulling,
    /** 正在刷新中的状态 */
    MJRefreshStateRefreshing,
    /** 即将刷新的状态 */
    MJRefreshStateWillRefresh,
    /** 所有数据加载完毕,没有更多的数据了 */
    MJRefreshStateNoMoreData
};

这个就属性就是刷新控件的状态值,可以使用KVO的方式在列表中监听控件状态的变化,从而增加震动反馈。

// 增加KVO监听
[_tableView.mj_header addObserver:self forKeyPath:@"state" options:NSKeyValueObservingOptionNew context:nil];

[_tableView.mj_footer addObserver:self forKeyPath:@"state" options:NSKeyValueObservingOptionNew context:nil];

实现监听方法

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
    
    if ([object isEqual:self.tableView.mj_header] && self.tableView.mj_header.state == MJRefreshStatePulling) {
        [self feedbackGenerator];
    }
    else if ([object isEqual:self.tableView.mj_footer] && self.tableView.mj_footer.state == MJRefreshStatePulling) {
        [self feedbackGenerator];
    }
}

震动反馈

- (void)feedbackGenerator {
    UIImpactFeedbackGenerator *generator = [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleMedium];
    [generator prepare];
    [generator impactOccurred];
}

人已赞赏
iOS文章

iOS·为WKWebView实现夜间模式切换/网页背景颜色切换功能

2019-10-10 19:40:01

iOS文章

there was an error sending data to the iTunes Store.Scheduling restart shortly...

2019-10-10 21:29:21

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索