[Cocoa]_[初级]_[使用异步线程加载图片文件实现进度条的更新]
来源:互联网 发布:mysql锁表 解锁 编辑:程序博客网 时间:2024/05/22 17:42
其中:主线程主要用来进行界面的描绘和更新。异步线程主要是用来加载一些耗时的工作,比如加载数据等等。
1.头文件MainObject.h
#import <Cocoa/Cocoa.h>@class LoadData;@interface MainObject: NSObject{ IBOutlet NSprogressIndicator *progressBar; //在MainMenu.lib中创建一个NSprogressIndicator ,设置范围0--100.0 LoadData *loadData;}@property (readwrite,assign) LoadData *loadData;-(IBAction) onAddImage:(id) sender; //在界面上创建一个控件设置代理,用于添加文件操作。-(void)updateProgressBar:(id)data;@end
2.源文件MainObject.m
#import "LoadData.h"#import "MainObject.h"@implementation LoadData@synthesize loadData;-(IBAction) onAddImage:(id) sender{ NSOpenPanel *panel = [NSOpenPanel openPanel]; [panel setAllowsMultipleSelection:YES]; [panel setAllowedFileTypes:[NSImage imageFileTypes]]; // Run the open panel [panel setMessage:@"Add Image Files"]; [panel beginSheetModalForWindow:[NSApp mainWindow] completionHandler:^(NSInteger result) { if (result == NSFileHandlingPanelOKButton) { NSArray *paths = [panel filenames]; dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),\\添加异步线程^{ [loadData setHandler:self]; [loadData doLoadImageFilePath:[paths retain]]; }); } }]; }-(void)updateProgressBar:(id)data{NSnumber *num = data;[progressbar setDouble:[num doubleValue]];}
3.头文件 LoadData.h
#import <Cocoa/Cocoa.h>@interface LoadData: NSObject{ id delegate;}-(void)setHandler:(id)handler;-(void) doLoadImageFilePath:(NSArray *) filePaths;@end
4.源文件 LoadData.m
#import "LoadData.h"#import "MainObject.h"@implementation LoadData-(void) setHandler:(id)handler{ delegate = handler;}-(void) doLoadImageFilePath:(NSArray *) filePaths item:(int) theItem{ NSArray *arrayAppendFilePaths = filePaths; int i = 1; int arrayLoadImageCount = [arrayAppendFilePaths count]; NSLog(@"dispatch_async isMainThread %d",[[NSThread currentThread] isMainThread]); for(NSString *filePth in arrayAppendFilePaths) { double temp = i*100.0/arrayLoadImageCount; [delegate performSelectorOnMainThread:@selector(updateProgressBar:) withObject:[NSNumber numberWithDouble:temp] waitUntilDone:NO]; //可以自己设置@selector(....),如更新图片、数据等等。这里是更新一个double。 ++i; }}@end
0 0
- [Cocoa]_[初级]_[使用异步线程加载图片文件实现进度条的更新]
- [Cocoa]_[初级]_[NSThread的使用]
- [Cocoa]_[初级]_[自定义的界面上绘制图片]
- [Cocoa]_[初级]_[使用NSXMLElement 创建一个XML文件]
- [Cocoa]_[初级]_[使用NSMutableDictionary词典生成plist文件]
- [Cocoa]_[初级]_[vcf文件的生成和导出]
- [wxWidgets]_[初级]_[常见更新进度条的方案]
- [Cocoa]_[初级]_[文件拖放操作]
- [Cocoa]_[初级]_[在Cocoa中使用图形上下文设备剪切图片]
- [ATL/WTL]_[初级]_[Win32实现Cocoa的dispatch_async到主线程的异步消息处理]
- [Cocoa]_[初级]_[Cocoa中对GIF动画分解成一帧帧的图片]
- [Cocoa]_[初级]_[获取图片文件的属性值:如图片大小、位深度、宽高、最后修改日期]
- [Cocoa]_[初级]_[使用NSAffineTransfrom 对NSImage图片进行旋转]
- [Cocoa]_[初级]_[Cocoa入门级界面开发之界面初级程序编辑的步骤和实现方法]
- [cocoa]_[初级]_[解析XML文件获取数据]
- [Cocoa]_[初级]_[NSTimer在Cocoa中的应用,主要以多张图片切换的播放和停止]
- [Cocoa]_[初级]_[使用NSOutlineView创建多根显示]
- [Cocoa]_[初级]_[使用NSMutableDictionary对多层循环里面的数据进行查找]
- Oracle后台进程
- Linux 中查看用户和用户组
- C语言第三次作业
- uva357
- C++中两个类相互包含引用问题
- [Cocoa]_[初级]_[使用异步线程加载图片文件实现进度条的更新]
- AtomicInteger类
- Intent
- iPhone屏幕知识点解析
- 不让Chrome标签页保存经常浏览网站
- 这辈子要做件有意义的事
- Java小项目之聊天软件Chat1.1版
- 位运算
- Oracle RAC时间同步