iOS开发之—UILabel的巧用

本文介绍如何利用UILabel创建一个简单的Toast效果。通过继承UILabel并在drawRect:rect方法中进行定制,实现了类似Toast的功能。文章提供了一种具体的使用代码示例。

主要讲解利用UILabel的来做一个简单的toast效果。这个是看到WDLabel的实现,感觉挺好的,就
主要的思路就是继承UILabel,然后在drawRect:(CGRect)rect里面进行调整,以达到一个toast的效果。

#define kLabelCornerRadius 9.0f
- (void)drawRect:(CGRect)rect
{
    CGContextRef ctx = UIGraphicsGetCurrentContext();

    rect = CGRectInset(rect, 8.0f, 8.0f);
    CGContextSetShadow(ctx, CGSizeMake(0, 2), 4); //设置阴影效果

    [[UIColor colorWithWhite:0.0f alpha:0.5f] set]; //设置填充颜色半透明

    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:kLabelCornerRadius];
    [path fill];//填充

    [[UIColor whiteColor] set]; //这里主要是设置一个白色的边缘地带
    path.lineWidth = 2;
    [path stroke];//设置线条宽度
    [super drawRect:rect];
}

如何使用呢,下面来讲解使用方式。直接贴出来代码吧;

- (void) showMessage:(NSString *)message
{
    [self showMessage:message autoHide:YES position:WDCenterOfRect(self.superview.bounds) duration:kMessageFadeDelay];
}

- (void) showMessage:(NSString *)message autoHide:(BOOL)autoHide position:(CGPoint)position duration:(float)duration
{
    BOOL created = NO;
    if (!messageLabel_) {
        messageLabel_ = [[WDLabel alloc] initWithFrame:CGRectInset(CGRectMake(0,0,100,40), -8, -8)];
        messageLabel_.textColor = [UIColor whiteColor];
        messageLabel_.font = [UIFont boldSystemFontOfSize:24.0f];
        messageLabel_.textAlignment = NSTextAlignmentCenter;
        messageLabel_.opaque = NO;
        messageLabel_.backgroundColor = nil;
        messageLabel_.alpha = 0;
        created = YES;
    }

    if ([message length] > 20 ) {
        messageLabel_.font = [UIFont boldSystemFontOfSize:15.0f];
    } else {
        messageLabel_.font = [UIFont boldSystemFontOfSize:24.0f];
    }

    messageLabel_.text = message;
    [messageLabel_ sizeToFit];  //适应一下大小

    CGRect frame = messageLabel_.frame;
    frame.size.width = MAX(frame.size.width, kMinimumMessageWidth);
    frame = CGRectInset(frame, -20, -15);
    messageLabel_.frame = frame;
    messageLabel_.sharpCenter = position;
    if (created) {
        [self.superview addSubview:messageLabel_];

        [UIView animateWithDuration:0.2f animations:^{ messageLabel_.alpha = 1; }];
    }
    // start message dismissal timer
    if (messageTimer_) {
        [messageTimer_ invalidate];
        messageTimer_ = nil;
    }
    if (autoHide) {
        messageTimer_ = [NSTimer scheduledTimerWithTimeInterval:duration target:self selector:@selector(hideMessage:) userInfo:nil repeats:NO];
    }
}

- (void) nixMessageLabel
{
    if (messageTimer_) {
        [messageTimer_ invalidate];
        messageTimer_ = nil;
    }

    if (messageLabel_) {
        [messageLabel_ removeFromSuperview];
        messageLabel_ = nil;
    }
}

- (void)hideMessage:(NSTimer *)timer
{
    [UIView animateWithDuration:0.2f
                     animations:^{ messageLabel_.alpha = 0.0f; }
                     completion:^(BOOL finished) {
                         [self nixMessageLabel];
                     }];

}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值