zoukankan      html  css  js  c++  java
  • 扇形进度

    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);
    }
  • 相关阅读:
    R语言基础入门
    调用arcpy包批量进行矢量掩膜提取
    一些js面试高频知识点的总结
    js实现五子棋人机对战源码
    编程题汇总,持续更新
    颜色字符串转换
    根据包名,在指定空间中创建对象
    JavaScript中[]+[] 、[]+{}、{}+[]、{}+{}的结果分析
    CSS命名规范
    谈谈浏览器的兼容性
  • 原文地址:https://www.cnblogs.com/MyBlogZH/p/5560258.html
Copyright © 2011-2022 走看看