iOS專案開發實戰——使用CALayer和定時器實現進度條
UIView作為CALayer的容器管理器,因其是更高層級的抽象,能實現的動畫效果收到了很多限制。CALayer作為動畫效果直接作用的實體,我們能利用很多的屬性。這裡我們將自定義一個進度條。
(1)ProgressView.h中的實現如下:
#import <UIKit/UIKit.h>
@interface ProgressView : UIView
@property (nonatomic,assign) CGFloat progress;//進度引數;
@end
(2)ProgressView.m的實現如下:
#import "ProgressView.h"
@interface ProgressView ()
@property (nonatomic,strong) CALayer *progressLayer;
@property (nonatomic,assign) CGFloat currentViewWdith;
@end
@implementation ProgressView
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.progressLayer = [CALayer layer];
self.progressLayer.frame = CGRectMake(0, 0, 0, frame.size.height);
self.progressLayer.backgroundColor = [UIColor redColor].CGColor;
[self.layer addSublayer:self.progressLayer];
//儲存當前View的寬度值;
self.currentViewWdith = frame.size.width;
}
return self;
}
#pragma mark - 重寫Set,Get方法;
- (void)setProgress:(CGFloat)progress{
NSLog(@"執行22222222");
_progress = progress;
if (progress <= 0) {
_progressLayer.frame = CGRectMake(0, 0, 0, self.frame.size.height);
}
else if (progress <= 1){
//progress其實就是0——1的比例;
_progressLayer.frame = CGRectMake(0, 0, progress * _currentViewWdith, self.frame.size.height);
}
else {
_progressLayer.frame = CGRectMake(0, 0, _currentViewWdith, self.frame.size.height);
}
}
- (CGFloat)getProgress{
NSLog(@"執行33333333");
return _progress;
}
@end
(3)ViewController.m中的實現如下:
#import "ViewController.h"
#import "ProgressView.h"
@interface ViewController ()
@property (nonatomic,strong) ProgressView *progressView;
@property (nonatomic,strong) NSTimer *timer;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor blackColor];
self.progressView = [[ProgressView alloc] initWithFrame:CGRectMake(50, 100, 250, 3)];
self.progressView.layer.borderWidth = 1.0f;
self.progressView.backgroundColor = [UIColor yellowColor];
[self.view addSubview:self.progressView];
[self performSelector:@selector(layerAnimation)
withObject:nil
afterDelay:2.0f];
//建立定時器,每秒執行一回;
self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(layerAnimation) userInfo:nil repeats:true];
}
int num = 0;
- (void) layerAnimation{
NSLog(@"%d",num++);
//隨機獲取 0%-100%給layer賦值;
self.progressView.progress = num / 100.f;
}
@end
(4)最後的實現效果如下,每秒鐘會增加1%。
.
github主頁:https://github.com/chenyufeng1991 。歡迎大家訪問!
相關文章
- iOS專案開發實戰——使用定時器實現迴圈操作iOS定時器
- iOS專案開發實戰——使用CALayer實現圖片的淡入淡出效果iOS
- iOS專案開發實戰——使用CoreLocation實現定位iOS
- iOS專案開發實戰——使用UICollectionView實現瀑布流iOSUIView
- iOS開發專案實戰——Swift實現ScrollView滾動條功能iOSSwiftView
- iOS專案開發實戰——使用ShareSDK進行QQ和微信分享iOS
- iOS專案開發實戰——使用程式碼實現頁面跳轉iOS
- iOS專案開發實戰——UILabel與取色器的使用iOSUI
- iOS專案開發實戰——自定義圓形進度提示控制元件iOS控制元件
- iOS實現音訊進度條效果iOS音訊
- iOS專案開發實戰——實現檢視切換動畫iOS動畫
- iOS專案開發實戰——使用SDWebImage庫進行圖片請求iOSWeb
- iOS專案開發實戰——網頁原始碼實現二進位制和HTML的轉換iOS網頁原始碼HTML
- iOS專案開發實戰——如何進行延時操作iOS
- 使用Java高速實現進度條Java
- iOS專案開發實戰——如何使用Autoresizing進行螢幕適配iOS
- iOS專案開發實戰——使用AFNetworking進行Http Get請求iOSHTTP
- [MAUI 專案實戰] 手勢控制音樂播放器(四):圓形進度條UI播放器
- iOS專案開發實戰——獲取系統當前時間iOS
- iOS專案開發實戰——實現蘋果本地訊息通知推送服務iOS蘋果
- iOS開發專案實戰——Swift實現圖片輪播與瀏覽iOSSwift
- iOS專案開發實戰——理解frame,bounds,centeriOS
- iOS專案開發實戰——檢視動畫效果iOS動畫
- iOS專案開發實戰——配置自定義動畫iOS動畫
- iOS專案開發實戰——plist陣列解析iOS陣列
- 【CLI】使用 Curl 下載檔案實時進度條顯示
- iOS專案開發實戰——自定義設定導航欄和狀態列背景iOS
- iOS專案開發實戰——storyboard設定介面技巧與注意事項iOS
- iOS專案開發實戰——使用使用者首選項資料進行啟動提示iOS
- iOS專案開發實戰——使用CoreLocation獲取當前位置資訊iOS
- golang 進度條功能實現Golang
- clip實現圓環進度條
- 命令列進度條實現命令列
- iOS專案開發實戰——螢幕適配、單位點和解析度iOS
- flask 專案開發實戰Flask
- 實施專案--如何推進專案實施進度
- 直播系統開發,實現在進度條中顯示文字顯示進度
- iOS專案開發實戰——Swift實現多個TableView的側滑與切換iOSSwiftView