iOS开发系列之常用自定义控件开发集

在实际开发中消息提示时很常见的需求,为了个性化和拥有简洁的UI状态栏提示是比较好的方案,好处很多如:不遮挡主UI,,新意,下面贴出实现代码。 WHC_StatusBarMessage.h头文件如下:

(){* logoImg;screenWidth; //屏幕宽度CGFloatscreenHeight; //屏幕高度}@property(nonatomic,retain)UILabel * statusLab;@property(nonatomic,retain)UIImageView * logImgView;static WHC_StatusBarMessage * msb;//构建单例+(WHC_StatusBarMessage *)shareStatusBar{static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{msb = [[WHC_StatusBarMessage alloc]init];});return msb;}//初始化UI-(id)init{CGRect statusFrame = [UIApplication sharedApplication].statusBarFrame;height = statusFrame.size.height;screenWidth = [UIScreen mainScreen];screenHeight = [UIScreen mainScreen];self = [super initWithFrame:statusFrame];if(self){self.frame = statusFrame;self.autoresizingMask = UIViewAutoresizingFlexibleWidth;self.windowLevel = UIWindowLevelStatusBar + 1.0;self.backgroundColor = kWHC_StatusBarMessageBack_Color;logoImg = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@”29×29″ ofType:@”png”]];logoImgV = [[UIImageView alloc]initWithFrame:CGRectMake(kPading, kPading / 2.0, kLogoWidth, kLogoWidth)];logoImgV.backgroundColor = [UIColor clearColor];[self addSubview:logoImgV];msgLab = [[+ kPading + logoImgV, + kPading + logoImgV), statusFrame.size.height)];msgLab.backgroundColor = [UIColor clearColor];msgLab.font = [UIFont systemFontOfSize:14.0];msgLab.textColor = [UIColor whiteColor];[self addSubview:msgLab];//注册单击事件UITapGestureRecognizer * tapStatusBar = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapTopBar:)];[self addGestureRecognizer:tapStatusBar];//注册状态栏方向监听事件[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(screenOrientationChange:) name:UIApplicationWillChangeStatusBarFrameNotification object:nil];}return self;}//处理单击状态栏消息- (void)tapTopBar:(UITapGestureRecognizer *)tapGesture{if(_whcStatusBardelegate && [_whcStatusBardelegate respondsToSelector:@selector(didTapTouchWHCStatusBarMessageDoSomething)]){[_whcStatusBardelegate didTapTouchWHCStatusBarMessageDoSomething];}}//显示状态栏消息-(void)showTextMessage:(NSString*)strMessage delayTime:(NSInteger)delay{[self.runTimer invalidate];self.runTimer = nil;if(logoImg == nil){logoImg = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@”29×29″ ofType:@”png”]];}if(delay == -1) delay = 3;logoImgV.image = logoImg;msgLab.text = strMessage;__block CGRect stateFrame = self.frame;stateFrame.origin.y = -20.0;self.frame = stateFrame;[UIView animateWithDuration:0.2 animations:^{stateFrame.origin.y = 0.0;self.frame = stateFrame;}];[self makeKeyAndVisible];self.runTimer = [NSTimer scheduledTimerWithTimeInterval:delay target:self selector:@selector(dismissTimer) userInfo:nil repeats:NO];}-(void)showMessage:(NSString*)strMessage logImage:(UIImage *)logImage delayTime:(NSInteger)delay{logoImg = logImage;[self showTextMessage:strMessage delayTime:delay];}-(void)dismissTimer{double delayInSeconds = 0.3;dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));dispatch_after(popTime, dispatch_get_main_queue(), ^(void){msb.hidden = YES;});}#pragma mark – screenChange-(void)screenOrientationChange:(NSNotification*)notif{UIInterfaceOrientation orientation = [[[notif userInfo] objectForKey:UIApplicationStatusBarOrientationUserInfoKey] integerValue];switch (orientation) {case UIInterfaceOrientationPortrait:self.transform = CGAffineTransformIdentity;self.frame = CGRectMake(0.0, 0.0, screenWidth, height);break;case UIInterfaceOrientationPortraitUpsideDown:self.transform = CGAffineTransformMakeRotation(M_PI);self.center = CGPointMake(screenWidth / 2.0, screenHeight – height / 2.0);self.bounds = CGRectMake(0.0, 0.0, screenWidth, height);break;case UIInterfaceOrientationLandscapeLeft:self.transform = CGAffineTransformMakeRotation(-M_PI_2);self.center = CGPointMake(height / 2.0, screenHeight / 2.0);self.bounds = CGRectMake(0.0, 0.0, screenHeight, height);break;case UIInterfaceOrientationLandscapeRight:self.transform = CGAffineTransformMakeRotation(M_PI_2);self.center = CGPointMake(screenWidth – height / 2.0, screenHeight / 2.0);self.bounds = CGRectMake(0.0, 0.0, screenHeight, height);break;default:break;}}@end

最好的感觉就是你什么都跟我说。

iOS开发系列之常用自定义控件开发集

相关文章:

你感兴趣的文章:

标签云: