主要讲解利用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];
}];
}
本文介绍如何利用UILabel创建一个简单的Toast效果。通过继承UILabel并在drawRect:rect方法中进行定制,实现了类似Toast的功能。文章提供了一种具体的使用代码示例。
2235

被折叠的 条评论
为什么被折叠?



