您的位置:首页 > 其它

自定义的弹出浮动框-自动消失

2016-07-03 11:42 295 查看
现在很多流行的弹出一个提示视图之后,自动消失的那种,我也自定义类,大家可以参考用用,另外后面把网易新闻从侧面滑出来的自动消失框:http://blog.csdn.net/wuyoujian0313/article/details/51814449

//
//  FadePromptView.m
//
//  Created by wuyj on 5/27/13.
//  Copyright (c) 2013 wuyj. All rights reserved.
//

#import "FadePromptView.h"
#import "NSString+Utility.h"

#define screenHeight [UIScreen mainScreen].bounds.size.height
#define screenWidth [UIScreen mainScreen].bounds.size.width

@interface FadePromptView()

@property(nonatomic,strong,readonly)NSTimer  *fadeOutTimer;
@property(nonatomic,strong)UILabel            *promptLabel;
@property(nonatomic,copy)finishPrompt         finishBlock;

@end

@implementation FadePromptView

- (void)setFadeOutTimer:(NSTimer *)newTimer {
if(_fadeOutTimer){
//因为不是一个重复性的NSTimer所以不需要invalidate
//[fadeOutTimer invalidate];
_fadeOutTimer =nil;
}

if(newTimer)
_fadeOutTimer = newTimer;
}

- (instancetype)initWithFrame:(CGRect)frame {

self = [superinitWithFrame:frame];
if (self) {
// Initialization code
[selfsetBackgroundColor:[UIColorcolorWithWhite:0.0alpha:0.7]];
[selfsetClipsToBounds:YES];

UILabel* prompt = [[UILabelalloc]initWithFrame:CGRectZero];
[prompt setBackgroundColor:[UIColorclearColor]];
[prompt setTextColor:[UIColorwhiteColor]];
[prompt setFont:[UIFontsystemFontOfSize:16]];
[prompt setNumberOfLines:0];
[prompt setLineBreakMode:NSLineBreakByWordWrapping];
[selfaddSubview:prompt];

self.promptLabel = prompt;

}
returnself;
}

+(void)showPromptStatus:(NSString*)status duration:(NSTimeInterval)seconds finishBlock:(finishPrompt)finish {
FadePromptView *promptView = [[FadePromptViewalloc]initWithFrame:CGRectZero];
[[[UIApplicationsharedApplication]keyWindow]addSubview:promptView];
promptView.finishBlock = [finishcopy];
[promptView show:statusduration:secondspositionY:screenHeight -100];
}

+(void)showPromptStatus:(NSString*)status duration:(NSTimeInterval)seconds positionY:(CGFloat)y  finishBlock:(finishPrompt)finish {
FadePromptView *promptView = [[FadePromptViewalloc]initWithFrame:CGRectZero];
[[[UIApplicationsharedApplication]keyWindow]addSubview:promptView];

promptView.finishBlock = [finishcopy];

[promptView show:statusduration:secondspositionY:y];
}

- (void)show:(NSString*)status duration:(NSTimeInterval)seconds positionY:(CGFloat)y {

__blockCGFloat yy = y;
dispatch_async(dispatch_get_main_queue(), ^{
CGSize size = [statussizeWithFontCompatible:self.promptLabel.fontconstrainedToSize:CGSizeMake(kFadePromptViewMaxWidth -30, CGFLOAT_MAX)lineBreakMode:self.promptLabel.lineBreakMode];

CGFloat w = size.width +30;
CGFloat h = size.height +16;
CGFloat x = (screenWidth - w )/2.0;
yy = yy  - h;

self.promptLabel.text = status;
CGRect rect = CGRectMake(x , yy, w, h);
self.frame = rect;
self.promptLabel.frame =CGRectMake(15,8, size.width, size.height);

self.alpha =0.0;
[UIViewanimateWithDuration:0.3animations:^{
self.alpha =1.0;

} completion:^(BOOL finished) {

[selfdismiss:seconds];
}];
});
}

-(void)dismiss:(NSTimeInterval)seconds{
self.fadeOutTimer = [NSTimerscheduledTimerWithTimeInterval:secondstarget:selfselector:@selector(dismiss)userInfo:nilrepeats:NO];
}

-(void)dismiss {
dispatch_async(dispatch_get_main_queue(), ^{
[UIViewanimateWithDuration:0.3animations:^{
self.alpha =0.0;

} completion:^(BOOL finished) {

[selfremoveFromSuperview];

if (_finishBlock) {
_finishBlock();
}
}];

});
}

@end


用法也很简单,就是提供一个block来处理提示之后的操作,适用于那些提示之后需要做进一步操作的场景!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  提示框