扇形进度

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); }

转载于:https://www.cnblogs.com/MyBlogZH/p/5560258.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值