参考网上的资料,自己实现了一个上传进度条的组件
1、ProcessIndicatorView.h
#import <UIKit/UIKit.h>
@interface ProcessIndicatorView : UIView
{
UIActivityIndicatorView *indicator;
UILabel *textLabel;
}
-(void)do_startAnimating;
-(void)do_stopAnimating;
-(void)do_changeProcessInfo:(NSString *)infoText;
@end
2、ProcessIndicatorView.m
#import "ProcessIndicatorView.h"
@implementation ProcessIndicatorView
-(id)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
float width = frame.size.width;
float height = frame.size.height;
indicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, width, height)];
//设置显示样式,见UIActivityIndicatorViewStyle的定义
indicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;
//indicator.center = CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height/2);//设置显示位置
indicator.backgroundColor = [UIColor grayColor];
//设置背景透明
indicator.alpha = 0.5;
indicator.layer.cornerRadius = 5;
indicator.layer.masksToBounds = YES;
//将初始化好的indicator add到view中
[self addSubview:indicator];
textLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, height-30, width, 30)];
[self addSubview:textLabel];
textLabel.textColor = [UIColor grayColor];
textLabel.textAlignment = NSTextAlignmentCenter;
textLabel.font = [UIFont systemFontOfSize:15];
}
return self;
}
-(void)do_startAnimating{
self.hidden = NO;
[indicator startAnimating];
textLabel.text = @"";
}
-(void)do_stopAnimating{
[indicator stopAnimating];
textLabel.text = @"";
self.hidden = YES;
}
-(void)do_changeProcessInfo:(NSString *)infoText{
textLabel.text = infoText;
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code
}
*/
@end
3、如何使用
3.1 初始化组件
float pos_x = (self.view.frame.size.width-100)/2.0;
float pos_y = (self.view.frame.size.height-100)/2.0;
processView = [[ProcessIndicatorView alloc] initWithFrame:CGRectMake(pos_x, pos_y, 100, 100)];
[self.view addSubview:processView];
3.2 调用方法
[processView do_startAnimating];
.........
[self saveImage:image withName:file_name];
NSLog(@"do_saveImageAndUploadJob is done... 照片的文件名 >>>> file_name =%@ ",file_name);
[processView do_stopAnimating];
3.3 配合ASIFormDataRequest
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL: [NSURL URLWithString: url]];
.........
[request setUploadProgressDelegate:self];
request.showAccurateProgress=YES;
3.4 实现对应的代理方法
//显示最新的上传发送进度
-(void)setProgress:(float)newProgress{
NSString *progressText = [NSString stringWithFormat:@"%0.f%%",newProgress*100];
[processView do_changeProcessInfo:progressText];
}
//-(void)request:(ASIHTTPRequest *)request didSendBytes:(long long)bytes{
// NSLog(@">>>> didSendBytes: %lld", bytes);
//}
//-(void)request:(ASIHTTPRequest *)request incrementUploadSizeBy:(long long)newLength{
// NSLog(@"incrementUploadSizeBy:%lld",newLength);
//}
/* 二者区别在于第2个参数的不同,前者的bytes参数是每次发送的字节数(不累加),后者的newLength参数是每次发送时已发送的字节书(累加)。 需要注意的是这个参数很大,为longlong类型,转换为字符串时可以用%lld格式化字符串: */
相关推荐
总之,Swift中利用轻量级组件让所有UIView支持进度条展示是一种高效的设计策略,它通过协议和分类实现了功能扩展,降低了代码复杂度,提升了开发效率。结合具体的进度条视图设计,我们可以构建出各种各样的进度反馈...
"iPhone之实现自定义进度条Progress"这个主题将引导我们探讨如何在iPhone应用中利用Swift编程语言来设计并实现一个个性化的进度条组件。我们将深入讨论以下几个关键知识点: 1. **UIProgressView**: iOS SDK提供了...
本项目“ios-简单自定义圆形颜色渐变进度条”正是关注于这一方面,旨在创建一个具有颜色渐变效果的圆形进度条。通过这个项目,我们可以学习到如何在iOS应用中实现自定义视图和动画。 首先,我们需要理解`...
"ios-自定义进度条Swift实现.zip"这个压缩包提供了一个使用Swift编程语言实现自定义进度条的示例。在这个项目中,开发者创建了一个不同于系统默认UIProgressView的自定义组件,以满足更个性化的界面需求。 首先,...
在iOS开发中,自定义进度条是...无论选择`UIView`还是`CAShapeLayer`,都可以通过灵活的编程实现丰富的自定义功能,让进度条成为应用界面的一大亮点。在实际开发中,应根据项目需求和性能考虑,选择最合适的实现方式。
自定义进度条的动态效果可以通过Core Animation实现。利用`UIView`的`animateWithDuration:animations:`方法,我们可以平滑地更新进度条的进度值,从而实现下载进度的动态显示。 5. **KVO(Key-Value Observing)*...
9. **代码示例**:以下是一个简单的自定义进度条类的代码框架: ```swift import UIKit class CustomProgressView: UIView { var progress: Float = 0.0 { didSet { setNeedsDisplay() } } override func ...
自定义控件是通过继承现有的UIControl或UIView类,并在其基础上添加自己的属性和方法来实现的。在这个案例中,我们可能会继承UIView,因为UIView可以提供基本的绘图功能,满足我们创建环形进度条的需求。 2. **...
1. 自定义UIView:为了实现环形进度条,我们需要创建一个继承自UIView的类,并在其中重写drawRect:方法,以便进行自定义绘图。在drawRect:方法中,我们可以利用Core Graphics框架提供的API进行图形绘制。 2. Core ...
在iOS中,可以创建一个自定义UIView子类,利用Swift的protocol和extension实现可配置性。 5. **用户交互**:自定义环形进度条可能需要响应用户的触摸事件,例如点击进度条开始或暂停加载。在Android中,可以重写...
本文将深入探讨如何实现一个自定义的动态背景进度条,基于标题“实现自定义具有动态背景进度条”以及描述中提到的源码实现。这个自定义进度条不仅能够显示进度百分比,还能为进度条添加动态背景效果,使得视觉表现更...
为了实现更复杂、高度可定制的进度条,开发者经常选择使用Core Graphics框架来创建自定义视图。本教程将详细介绍如何使用Swift和Core Graphics来构建一个名为YLProgressBar的高度可定制的动画进度条。 首先,`Core ...
本教程将详细讲解如何实现一款自定义的方格进度条,包括圆角方格、圆形以及反向显示的进度条。 首先,我们需要了解iOS中的`UISlider`类,它是系统提供的默认进度条控件。然而,为了满足特定的设计需求,我们往往...
本教程将深入探讨如何实现一个自定义的环形进度条,并展示百分比。 ### 1. 环形进度条的基本概念 环形进度条是一种图形化的进度指示器,通常由一个闭合的圆形路径组成,其中一部分被填充以表示已完成的部分,剩余...
- **iOS自定义UIView**:在iOS中,可以使用CALayer或自定义UIView来绘制进度条。 5. **进度条实现**: - **动画效果**:通过帧动画或时间线控制进度条的填充速度,实现平滑过渡。 - **数据绑定**:进度条的值...
本篇将详细讲解如何使用`UIBezierPath`和`CAShapeLayer`在Swift中自定义一款倒计时进度条,该进度条适用于启动页面的倒计时功能,可以灵活定制颜色、宽度以及响应点击事件。 首先,`UIBezierPath`是`UIKit`框架中的...
本教程将深入探讨如何实现一个自定义的进度条,使其更加美观且个性化。 首先,我们要理解“UIProgress”这个标签。在iOS中,`UIProgressView` 是苹果提供的一个系统组件,用于显示线性进度条。而在Android中,对应...
1. 自定义UIView子类: 创建一个新的Swift或Objective-C文件,继承自UIView。在这个子类中,我们需要重写draw(_ rect: CGRect)方法,这是自定义绘图的核心。在这里,我们可以利用Core Graphics框架,通过CGContext...
2. **自定义视图绘制**:如果要完全自定义进度条的外观,可能需要继承UIView并覆盖`draw(_ rect: CGRect)`方法,利用Core Graphics框架进行绘图。你可以绘制背景轨道、进度条以及可能的指示器等元素。 3. **动画...
在iOS开发中,我们通常会利用UIKit框架中的UIProgressView,但这次我们将通过自定义UIView来实现这一功能,以便更好地理解自定义视图的工作原理。 首先,我们需要创建一个新的UIView子类。在Swift中,我们可以创建...