编程技巧 - 3

18.封装UIButton的初始化 - 简化:

- (UIButton *)buttonWith:(NSString *)noraml hightLight:(NSString *)hightLight action:(SEL)action
{
    UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom];
    [btn setImage:[UIImage imageNamed:noraml] forState:UIControlStateNormal];
    [btn setImage:[UIImage imageNamed:hightLight] forState:UIControlStateHighlighted];
    [btn addTarget:self action:action forControlEvents:UIControlEventTouchUpInside];
    
    return btn;
}

使用:

self.voiceBtn = [self buttonWith:@"chat_bottom_voice_nor.png"
                      hightLight:@"chat_bottom_voice_press.png"
                          action:@selector(voiceBtnPress:)];
[self.voiceBtn setFrame:CGRectMake(0,0, 33, 33)];

是不是轻巧多啦



19.UIControlState 还能这样用

[self.speakButton setTitleColor:[UIColor redColor] forState:(UIControlState)UIControlEventTouchDown];
因为传统的UIControlState只有下面几种形式:

typedef NS_OPTIONS(NSUInteger, UIControlState) {
    UIControlStateNormal       = 0,
    UIControlStateHighlighted  = 1 << 0,                  // used when UIControl isHighlighted is set
    UIControlStateDisabled     = 1 << 1,
    UIControlStateSelected     = 1 << 2,                  // flag usable by app (see below)
    UIControlStateApplication  = 0x00FF0000,              // additional flags available for application use
    UIControlStateReserved     = 0xFF000000               // flags reserved for internal framework use
};


那如果想在事件:UIControlEventTouchDown 或其他情况使用状态效果,就可以强制转换一下。




20.更新约束放在updateConstraints里面

- (void)updateConstraints {
    [self.growingButton mas_updateConstraints:^(MASConstraintMaker *make) {
        make.center.equalTo(self);
        make.width.equalTo(@(self.buttonSize.width)).priorityLow();
        make.height.equalTo(@(self.buttonSize.height)).priorityLow();
        make.width.lessThanOrEqualTo(self);
        make.height.lessThanOrEqualTo(self);
    }];

    //according to apple super should be called at end of method
    [super updateConstraints];
}



21.高宽增加用sizeOffset 

// make width = superview.width + 100, height = superview.height - 50
make.size.equalTo(superview).sizeOffset(CGSizeMake(100, -50))



22.Masonry left right并写

[subv mas_makeConstraints:^(MASConstraintMaker *make) {

    make.left.and.right.equalTo(container);

}];
left.and.right   一起写,多好!




23.添加手势的优雅写法

添加长按和触击用这样的一句话讲完,又优雅又简洁。

        [self addGestureRecognizer: [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longTap:)]];

        [self addGestureRecognizer:[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapPress:)]];



24.取Rect值

一个视图存在一个CGRect属性,当我们想取它的最大的X如图:


我们可以用:CGRectGetMaxX这个宏来获取

CGFloat contentX = CGRectGetMaxX(self.iconRect) + kIconMarginX;

同理,我们也能获取最小,中间值等,也可以获取Y的值

还有一个相当好的宏方法MAX(A, B),这个方法很灵活,如下面,配合着使用:

self.cellHeight = MAX(CGRectGetMaxY(self.iconRect), CGRectGetMaxY(self.chartViewRect)) + kIconMarginY




25.封装技巧

直接上一段代码:

typedef enum
{
    JSMessagesViewAvatarPolicyIncomingOnly = 0,
    JSMessagesViewAvatarPolicyBoth,
    JSMessagesViewAvatarPolicyNone
}   JSMessagesViewAvatarPolicy;

- (JSMessagesViewAvatarPolicy)avatarPolicy
{

    return JSMessagesViewAvatarPolicyBoth;
}

这里做个提醒:前面的代码有一处是:self.delegate = self ;

- (BOOL)shouldHaveAvatarForRowAtIndexPath:(NSIndexPath *)indexPath
{
    switch ([self.delegate avatarPolicy]) {
        case JSMessagesViewAvatarPolicyIncomingOnly:
            return [self.delegate messageTypeForRowAtIndexPath:indexPath] == JSBubbleMessageTypeIncoming;
            
        case JSMessagesViewAvatarPolicyBoth:
            return YES;
            
        case JSMessagesViewAvatarPolicyNone:
        default:
            return NO;
    }
}

BOOL hasAvatar = [self shouldHaveAvatarForRowAtIndexPath:indexPath];
    
NSString *CellID = [NSString stringWithFormat:@"MessageCell_%d_%d_%d_%d", type, bubbleStyle, hasTimestamp, hasAvatar];

优雅! 内含乾坤!






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值