绘制自定义控件代码笔记

@implementation HPMailDirectDrawCell

-(instancetype)init {
    self = [super init];
    if(self) {
        [self setup];
    }
    return self;
}

-(id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if(self) {
        [self setup];
    }
    return self;
}

-(instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if(self) {
        [self setup];
    }
    return self;
}

-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if(self) {
        [self setup];
    }
    return self;
}

-(void)setup {
    UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(cellTapped:)];
    [self addGestureRecognizer:gesture];
}

-(IBAction)cellTapped:(UIGestureRecognizer *)recognizer {
    CGPoint location = [recognizer locationInView:self];
    if(location.x >= 0 && location.x <= 20 && location.y >= 30) {
        self.isMailSelected = !self.isMailSelected;
        [self setNeedsDisplayInRect:CGRectMake(0, 30, 20, self.frame.size.height)];
        //[self setNeedsDisplay];
    }
}

- (void)awakeFromNib {
}

-(void)drawRect:(CGRect)rect {
    {
        UIImage *statusImage = nil;
        switch(self.mailStatus) {
            case HPMailDirectDrawCellStatusRead:
                statusImage = [UIImage imageNamed:@"bolt"];
                break;
            case HPMailDirectDrawCellStatusReplied:
                statusImage = [UIImage imageNamed:@"second"];
                break;
            case HPMailDirectDrawCellStatusUnread:
            default:
                statusImage = [UIImage imageNamed:@"bolt_selected"];
                break;
        }

        CGRect statusRect = CGRectMake(8, 4, 12, 12);
        [statusImage drawInRect:statusRect];
    }

    {
        UIImage *attachmentImage = nil;
        if(self.hasAttachment) {
            attachmentImage = [UIImage imageNamed:@"mail_attachment"];
        }

        CGRect statusRect = CGRectMake(8, 20, 12, 12);
        [attachmentImage drawInRect:statusRect];
    }
    
    {
        UIImage *selectedImage = [UIImage imageNamed:(self.isMailSelected ? @"mail_selected": @"mail_unselected")];
        CGRect selectedRect = CGRectMake(8, 36, 12, 12);
        [selectedImage drawInRect:selectedRect];
    }

    float fontSize = 13;
    CGFloat width = rect.size.width;
    CGFloat remainderWidth = width - 28;
    {
        CGFloat emailWidth = remainderWidth - 72;
        UIFont *emailFont=[UIFont boldSystemFontOfSize:fontSize];
        NSDictionary *attrs = @{ NSFontAttributeName: emailFont };

        [self.email drawInRect:CGRectMake(28, 4, emailWidth, 16) withAttributes:attrs];
    }

    {
        UIFont *stdFont = [UIFont systemFontOfSize:fontSize];
        NSDictionary *attrs = @{ NSFontAttributeName: stdFont };
        [self.subject drawInRect:CGRectMake(28, 24, remainderWidth, 16) withAttributes:attrs];
        [self.snippet drawInRect:CGRectMake(28, 44, remainderWidth, 16) withAttributes:attrs];
    }

    {
        UIFont *verdana = [UIFont fontWithName:@"Verdana" size:10];
        NSDictionary *attrs = @{ NSFontAttributeName: verdana };
        [self.date drawInRect:CGRectMake(width - 60, 4, 60, 16) withAttributes:attrs];
    }
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];
    //self.isMailSelected = selected;
    //[self setNeedsDisplayInRect:CGRectMake(8, 36, 12, 12)];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容