自定義的彈出浮動框-自動消失

現在很多流行的彈出一個提示視圖之後,自動消失的那種,我也自定義類,大家可以參考用用,另外後面把網易新聞從側面滑出來的自動消失框: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來處理提示之後的操作,適用於那些提示之後需要做進一步操作的場景!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章