• 功能源代码(扇形进度)及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
  • 相关阅读:
    最大公约数与最小公倍数
    素数筛
    基础数学问题
    考试前打模板
    斐波那契公约数
    期望及期望dp
    状压dp总结
    树链剖分学习
    B君的教育
    [noip2016]愤怒的小鸟
  • 原文地址:https://www.cnblogs.com/wujy/p/5541770.html
Copyright © 2020-2023  润新知