美文网首页
2018年初九 上班第一天

2018年初九 上班第一天

作者: 字节码 | 来源:发表于2018-02-24 16:34 被阅读112次

今天初九,也是2018年上班第一天,继续 改bug、优化代码、提升用户体验😆,真心希望旅图的产品越来越好。

MJRefresh 下拉刷新时触发taptic反馈
第一种方式:
在继承UITableView的子类中重新setMj_header:方法,并hook住mj_header的setState:方法,当state == MJRefreshStatePulling时,触发taptic反馈,
示例代码:

#import <MJRefresh.h>
#import "Aspects.h"

@interface BBTableView ()
#ifdef __IPHONE_10_0
@property (nonatomic, strong) UIImpactFeedbackGenerator *feedbackGenerator;
#endif
@property (nonatomic, strong) NSMutableArray<id<AspectToken>> *aspectArray;
@end

@implementation BBTableView
- (void)setMj_header:(MJRefreshHeader *)mj_header {
    if (self.mj_header != mj_header) {
        [self clearAspects];
        NSError *error = nil;
        __weak typeof(&*self) weakSelf = self;
        id<AspectToken> asp = [mj_header aspect_hookSelector:@selector(setState:) withOptions:AspectPositionAfter usingBlock:^(id instance, MJRefreshState state){
            if (state == MJRefreshStatePulling) {
                __strong typeof(&*weakSelf) self = weakSelf;
                // 触发taptic反馈
#ifdef __IPHONE_10_0
                [self.feedbackGenerator impactOccurred];
#endif
            }
            
        } error:&error];
        if (asp) {
            [self.aspectArray addObject:asp];
        }
    }
    [super setMj_header:mj_header];
}

- (void)clearAspects {
    [self.aspectArray enumerateObjectsUsingBlock:^(id<AspectToken>  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        [obj remove];
    }];
    [self.aspectArray removeAllObjects];
}

@end

第二种方法: 全局添加,直接给MJRefreshHeader添加分类,并交换setState:方法实现
示例代码:

@implementation MJRefreshHeader (BBFeedbackGenerator)

#ifdef __IPHONE_10_0
- (UIImpactFeedbackGenerator *)feedbackGenerator {
    UIImpactFeedbackGenerator *feedbackGenerator = objc_getAssociatedObject(self, _cmd);
    if (feedbackGenerator == nil) {
        feedbackGenerator = [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleLight];
        objc_setAssociatedObject(self, _cmd, feedbackGenerator, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    }
    return feedbackGenerator;
}
#endif

- (void)bb_setState:(MJRefreshState)state {
    if (self.state != state) {
        if (state == MJRefreshStatePulling) {
            // 触发taptic反馈
#ifdef __IPHONE_10_0
            [self.feedbackGenerator impactOccurred];
#endif
        }
    }

    [self bb_setState:state];
    
}

+ (void)load {
    [self exchangeInstanceMethod1:@selector(setState:) method2:@selector(bb_setState:)];
}

+ (void)exchangeInstanceMethod1:(SEL)method1 method2:(SEL)method2
{
    method_exchangeImplementations(class_getInstanceMethod(self, method1), class_getInstanceMethod(self, method2));
}
@end

相关文章

  • 2019-02-14情人节快乐

    今天大年初十,恰逢是2月14日,西方的情人节,祝自己情人节快乐。 初九,我们开始上班了,上班第一天最重要的仪式感就...

  • 节后思路

    跟大家聊聊后面的思路。 初七上班第一天,管理人都联系了一下,玩非标的管理人,大部分都是初九才开始正式上班,因为...

  • 2018年初九 上班第一天

    今天初九,也是2018年上班第一天,继续 改bug、优化代码、提升用户体验?,真心希望旅图的产品越来越好。 MJR...

  • 《日记61—目标越清晰,行动越高效》

    今天天气好晴朗,大年初九,是我们上班的第一天,我满怀期待的心情。 昨晚吃完晚饭,我开始规划自己的上...

  • 突然之间

    很多时候会突然间冒出很多的想法,却不敢去实现……会害怕失去!大年初九,上班第一天,一个字困!

  • 502

    2月20日,正月初九,晴,周六。 上班第一天,温度创高,24到11度,太阳底下犹如夏天,太阳辣的刺眼。看天气预报,...

  • 新年新气象

    今天第一天上班,2019年正月初九,吉祥数字,好日子。路上车辆、行人很多,公交车好挤,大家都恢复了节前日程和节奏。...

  • 2019_02_13

    今天是大年初九,是上班的第一天。 今天我看到了半月没见的他。其实半个月没见了,对于他,我不似从前那般想见了……更多...

  • 读了这本书,我决定提前上班了

    今天初八了,但我们还在假期,初九正式年后上班第一天。 这两天待在家读了摩西奶奶的《人生只有一次,去做自己喜欢的事》...

  • 你敢对自己这么「狠」吗?

    今天要向大家说个重要决定。 对自己狠一次。 今天是大年初九,我第一天上班。没有时间缓解「假日综合症」,直接就开始「...

网友评论

      本文标题:2018年初九 上班第一天

      本文链接:https://www.haomeiwen.com/subject/yjxcxftx.html