功能源代码(扇形进度)及Delegate运用在开放事件中、UINavigationController的封装
1:扇形进度视图及运用
首先先创建扇形的视图,传入进度值
#import <UIKit/UIKit.h> @interface LHProgressView : UIView @property (nonatomic) float progress; @end
#import "LHProgressView.h" #define MinProgress (1.0 / 16.0) @implementation LHProgressView - (id)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { self.backgroundColor = [UIColor clearColor]; _progress = MinProgress; } return self; } - (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); CGContextFillPath(context); CGRect aRect= CGRectMake(2, 2, self.bounds.size.width - 4, self.bounds.size.height - 4); CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 0.9); CGContextSetLineWidth(context, 2.0); CGContextAddEllipseInRect(context, aRect); CGContextDrawPath(context, kCGPathStroke); CGFloat centerX = self.bounds.size.width / 2; CGFloat centerY = self.bounds.size.height / 2; UIColor *aColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.9]; CGContextSetFillColorWithColor(context, aColor.CGColor); CGContextSetLineWidth(context, 0.0); CGContextMoveToPoint(context, centerX, centerY); CGContextAddArc(context, centerX, centerY, (self.bounds.size.width - 10) / 2, - M_PI_2, - M_PI_2 + self.progress * 2 *M_PI, 0); CGContextClosePath(context); CGContextDrawPath(context, kCGPathFillStroke); } - (void)setProgress:(float)progress { _progress = progress; if (_progress < MinProgress) { _progress = MinProgress; } if (_progress >= 1.0) { [self setNeedsDisplay]; [self removeFromSuperview]; } else { [self setNeedsDisplay]; } } @end
运用:
@property(nonatomic, strong)LHProgressView *progressView;
-(instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { self.backgroundColor = [UIColor clearColor]; _progressView = [[LHProgressView alloc] init]; } return self; }
- (void)setItemImageUrl:(NSString *)itemImageUrl { _itemImageUrl = itemImageUrl; BOOL imageExist = [[SDWebImageManager sharedManager] cachedImageExistsForURL:[NSURL URLWithString:itemImageUrl]]; if (_itemImageProgress == 1.0 || imageExist) { [_progressView removeFromSuperview]; } else { _progressView.bounds = CGRectMake(0, 0, 50, 50); _progressView.center = CGPointMake((self.bounds.size.width) / 2, (self.bounds.size.height) / 2); [self addSubview:_progressView]; _progressView.progress = _itemImageProgress; } _itemImageView.image = _itemImage; [self resetSize]; __weak LHProgressView *progressView = _progressView; __weak LHPhotoView *photoView = self; NSInteger index = self.tag - 1; [[SDWebImageManager sharedManager] downloadImageWithURL:[NSURL URLWithString:itemImageUrl] options:SDWebImageRetryFailed | SDWebImageLowPriority progress:^(NSInteger receivedSize, NSInteger expectedSize) { if ([photoView.photoViewDelegate respondsToSelector:@selector(photoIsShowingPhotoViewAtIndex:)]) { BOOL isShow = [photoView.photoViewDelegate photoIsShowingPhotoViewAtIndex:index]; if (isShow) { if (receivedSize > kMinProgress) { progressView.progress = (float)receivedSize/expectedSize; } } } if ([photoView.photoViewDelegate respondsToSelector:@selector(updatePhotoProgress:andIndex:)]) { [photoView.photoViewDelegate updatePhotoProgress:(float)receivedSize/expectedSize andIndex:index]; } } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { if (image) { if ([photoView.photoViewDelegate respondsToSelector:@selector(photoIsShowingPhotoViewAtIndex:)]) { BOOL isShow = [photoView.photoViewDelegate photoIsShowingPhotoViewAtIndex:index]; if (isShow) { photoView.itemImageView.image = image; [self resetSize]; } } if ([photoView.photoViewDelegate respondsToSelector:@selector(updatePhotoProgress:andIndex:)]) { [photoView.photoViewDelegate updatePhotoProgress:1.0 andIndex:index]; } } }]; }
注意:在break里面要先处理一下对象__weak LHProgressView *progressView = _progressView;上面也用到SDWebImage进行图片加载,并把进度赋值
2:Delegate运用在开放事件中
#import <UIKit/UIKit.h> @class DMDropDownMenu; @protocol DMDropDownMenuDelegate <NSObject> - (void)selectIndex:(NSInteger)index AtDMDropDownMenu:(DMDropDownMenu *)dmDropDownMenu; @end
@interface DMDropDownMenu : UIView @property(nonatomic,assign)id<DMDropDownMenuDelegate>delegate; @end
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [self tapAction]; _curText.text = self.listArr[indexPath.row]; if ([_delegate respondsToSelector:@selector(selectIndex:AtDMDropDownMenu:)]) { [_delegate selectIndex:indexPath.row AtDMDropDownMenu:self]; } }
运用时三步代码:
@interface ViewController ()<DMDropDownMenuDelegate> @end DMDropDownMenu * dm1 = [[DMDropDownMenu alloc] initWithFrame:CGRectMake(10, 150, 299, 30)]; dm1.delegate = self; [self.view addSubview:dm1]; - (void)selectIndex:(NSInteger)index AtDMDropDownMenu:(DMDropDownMenu *)dmDropDownMenu { NSLog(@"dropDownMenu:%@ index:%d",dmDropDownMenu,index); }
3:UINavigationController的封装
#import <UIKit/UIKit.h> #import "UIColor+KSString.h" @interface KSNavigationController : UINavigationController @end
#import "KSNavigationController.h" @interface KSNavigationController ()<UIGestureRecognizerDelegate> @end @implementation KSNavigationController - (void)viewDidLoad { [super viewDidLoad]; //设置手势代理 self.interactivePopGestureRecognizer.delegate = self; //设置NavigationBar [self setupNavigationBar]; } //设置导航栏主题 - (void)setupNavigationBar { UINavigationBar *appearance = [UINavigationBar appearance]; //统一设置导航栏颜色,如果单个界面需要设置,可以在viewWillAppear里面设置,在viewWillDisappear设置回统一格式。 [appearance setBarTintColor:[UIColor getColor:@"fb9c0a"]]; //导航栏title格式 NSMutableDictionary *textAttribute = [NSMutableDictionary dictionary]; textAttribute[NSForegroundColorAttributeName] = [UIColor whiteColor]; textAttribute[NSFontAttributeName] = [UIFont systemFontOfSize:15]; [appearance setTitleTextAttributes:textAttribute]; } - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated { if (self.viewControllers.count > 0) { viewController.hidesBottomBarWhenPushed = YES; UIButton *backButton = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 22, 22)]; [backButton setImage:[UIImage imageNamed:@"back"] forState:UIControlStateNormal]; [backButton setImage:[UIImage imageNamed:@"back"] forState:UIControlStateHighlighted]; [backButton setImageEdgeInsets:UIEdgeInsetsMake(0, -20, 0, 0)]; [backButton addTarget:self action:@selector(popView) forControlEvents:UIControlEventTouchUpInside]; viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:backButton]; } [super pushViewController:viewController animated:animated]; } - (void)popView { [self popViewControllerAnimated:YES]; } //手势代理 - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { return self.childViewControllers.count > 1; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
4:MBProgressHUD的扩展1.0.0
// // NSObject+MP.m // MobileProject // // Created by wujunyang on 16/7/9. // Copyright © 2016年 wujunyang. All rights reserved. // #import "MBProgressHUD+MP.h" @implementation MBProgressHUD (MP) #pragma mark 显示错误信息 + (void)showError:(NSString *)error ToView:(UIView *)view{ [self showCustomIcon:@"MBHUD_Error" Title:error ToView:view]; } + (void)showSuccess:(NSString *)success ToView:(UIView *)view { [self showCustomIcon:@"MBHUD_Success" Title:success ToView:view]; } + (void)showInfo:(NSString *)Info ToView:(UIView *)view { [self showCustomIcon:@"MBHUD_Info" Title:Info ToView:view]; } #pragma mark 显示一些信息 + (MBProgressHUD *)showMessage:(NSString *)message ToView:(UIView *)view { if (view == nil) view = (UIView*)[UIApplication sharedApplication].delegate.window; // 快速显示一个提示信息 MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:YES]; hud.mode=MBProgressHUDModeText; hud.label.text=message; hud.label.font=CHINESE_SYSTEM(15); //修改弹出窗的色 hud.bezelView.color =[UIColor whiteColor]; // 隐藏时候从父控件中移除 hud.removeFromSuperViewOnHide = YES; //代表需要蒙版效果 hud.backgroundView.style = MBProgressHUDBackgroundStyleSolidColor; hud.backgroundView.color = [UIColor colorWithWhite:0.f alpha:0.6f]; return hud; } //加载视图 +(void)showLoadToView:(UIView *)view{ [self showMessage:@"加载中..." ToView:view]; } /** * 进度条View */ + (MBProgressHUD *)showProgressToView:(UIView *)view Text:(NSString *)text{ if (view == nil) view = (UIView*)[UIApplication sharedApplication].delegate.window; MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:YES]; hud.label.text=text; hud.label.font=CHINESE_SYSTEM(15); //修改弹出窗的色 hud.bezelView.color =[UIColor whiteColor]; // 代表需要蒙版效果 hud.backgroundView.style = MBProgressHUDBackgroundStyleSolidColor; hud.backgroundView.color = [UIColor colorWithWhite:0.f alpha:0.6f]; return hud; } //快速显示一条提示信息 + (void)showAutoMessage:(NSString *)message{ [self showAutoMessage:message ToView:nil]; } //自动消失提示,无图 + (void)showAutoMessage:(NSString *)message ToView:(UIView *)view{ [self showMessage:message ToView:view RemainTime:2 Model:MBProgressHUDModeText]; } //自定义停留时间,有图 +(void)showIconMessage:(NSString *)message ToView:(UIView *)view RemainTime:(CGFloat)time{ [self showMessage:message ToView:view RemainTime:time Model:MBProgressHUDModeIndeterminate]; } //自定义停留时间,无图 +(void)showMessage:(NSString *)message ToView:(UIView *)view RemainTime:(CGFloat)time{ [self showMessage:message ToView:view RemainTime:time Model:MBProgressHUDModeText]; } +(void)showMessage:(NSString *)message ToView:(UIView *)view RemainTime:(CGFloat)time Model:(MBProgressHUDMode)model{ if (view == nil) view = (UIView*)[UIApplication sharedApplication].delegate.window; // 快速显示一个提示信息 MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:YES]; hud.label.text=message; hud.label.font=CHINESE_SYSTEM(15); //模式 hud.mode = model; // 隐藏时候从父控件中移除 hud.removeFromSuperViewOnHide = YES; //修改弹出窗的色 hud.bezelView.color =[UIColor whiteColor]; // 代表需要蒙版效果 hud.backgroundView.style = MBProgressHUDBackgroundStyleSolidColor; hud.backgroundView.color = [UIColor colorWithWhite:0.f alpha:0.6f]; // 隐藏时候从父控件中移除 hud.removeFromSuperViewOnHide = YES; // X秒之后再消失 [hud hideAnimated:YES afterDelay:time]; } + (void)showCustomIcon:(NSString *)iconName Title:(NSString *)title ToView:(UIView *)view { if (view == nil) view = (UIView*)[UIApplication sharedApplication].delegate.window; // 快速显示一个提示信息 MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:YES]; hud.label.text=title; hud.label.font=CHINESE_SYSTEM(15); // 设置图片 hud.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:iconName]]; // 再设置模式 hud.mode = MBProgressHUDModeCustomView; // 隐藏时候从父控件中移除 hud.removeFromSuperViewOnHide = YES; //修改弹出窗的色 hud.bezelView.color =[UIColor whiteColor]; // 代表需要蒙版效果 hud.backgroundView.style = MBProgressHUDBackgroundStyleSolidColor; hud.backgroundView.color = [UIColor colorWithWhite:0.f alpha:0.6f]; // 3秒之后再消失 [hud hideAnimated:YES afterDelay:2]; } + (void)hideHUDForView:(UIView *)view { if (view == nil) view = (UIView*)[UIApplication sharedApplication].delegate.window; [self hideHUDForView:view animated:YES]; } + (void)hideHUD { [self hideHUDForView:nil]; } @end
// // MBProgressHUD+MP.h // MobileProject // 当引入MBProgressHUD时把下面的代码开放出来 // 使用如下: // [MBProgressHUD showIconMessage:@"默认图,X秒后自动消失" ToView:self.view RemainTime:3]; // 如果没有视图则可以[MBProgressHUD showIconMessage:@"默认图,X秒后自动消失" ToView:nil RemainTime:3]; // [MBProgressHUD showMessage:@"纯文字,不自动消失" ToView:self.view]; 关掉则用:[MBProgressHUD hideHUD];//使用此方法进行隐藏 // MBProgressHUD *hud = [MBProgressHUD showProgressToView:nil Text:@"loading"]; 隐藏:[hud hide:YES]; // [MBProgressHUD showAutoMessage:@"自动消失"]; // [MBProgressHUD showSuccess:@"下载完成" ToView:self.view]; // [MBProgressHUD showError:@"下载失败" ToView:self.view]; // Created by wujunyang on 16/7/9. // Copyright © 2016年 wujunyang. All rights reserved. // #import <Foundation/Foundation.h> #import "MBProgressHUD.h" @interface MBProgressHUD (MP) /** * 自定义图片的提示,3s后自动消息 * * @param text 要显示的文字 * @param icon 图片地址(建议不要太大的图片) * @param view 要添加的view */ + (void)showCustomIcon:(NSString *)iconName Title:(NSString *)title ToView:(UIView *)view; /** * 自动消失成功提示,带默认图 * * @param success 要显示的文字 * @param view 要添加的view */ + (void)showSuccess:(NSString *)success ToView:(UIView *)view; /** * 自动消失错误提示,带默认图 * * @param error 要显示的错误文字 * @param view 要添加的View */ + (void)showError:(NSString *)error ToView:(UIView *)view; /** * 自动消失提示,带默认图 * * @param Info 要显示的文字 * @param view 要添加的View */ + (void)showInfo:(NSString *)Info ToView:(UIView *)view; /** * 文字+菊花提示,不自动消失 * * @param message 要显示的文字 * @param view 要添加的View * * @return MBProgressHUD */ + (MBProgressHUD *)showMessage:(NSString *)message ToView:(UIView *)view; /** * 快速显示一条提示信息 * * @param showAutoMessage 要显示的文字 */ + (void)showAutoMessage:(NSString *)message; /** * 自动消失提示,无图 * * @param message 要显示的文字 * @param view 要添加的View */ + (void)showAutoMessage:(NSString *)message ToView:(UIView *)view; /** * 自定义停留时间,有图 * * @param message 要显示的文字 * @param view 要添加的View * @param time 停留时间 */ +(void)showIconMessage:(NSString *)message ToView:(UIView *)view RemainTime:(CGFloat)time; /** * 自定义停留时间,无图 * * @param text 要显示的文字 * @param view 要添加的View * @param time 停留时间 */ +(void)showMessage:(NSString *)message ToView:(UIView *)view RemainTime:(CGFloat)time; /** * 加载视图 * * @param view 要添加的View */ + (void)showLoadToView:(UIView *)view; /** * 进度条View * * @param view 要添加的View * @param model 进度条的样式 * @param text 显示的文字 * * @return 返回使用 */ + (MBProgressHUD *)showProgressToView:(UIView *)view Text:(NSString *)text; /** * 隐藏ProgressView * * @param view superView */ + (void)hideHUDForView:(UIView *)view; /** * 快速从window中隐藏ProgressView */ + (void)hideHUD; @end