你的位置:首页 > 操作系统

[操作系统]功能源代码(扇形进度)及Delegate运用在开放事件中


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