NSImageView 实现跑马灯效果
在一些View里面,需要延迟0.5秒才能刷新界面(比如Hidden等)
M
#import <Foundation/Foundation.h>
@interface For_Thread_Var : NSObject
{
NSString *m_PicFileName_LoadingAnimation_Gray;
NSString *m_PicFileName_LoadingAnimation_Light;
BOOL m_stop;
float m_TimeInterval;
}
@property (nonatomic) BOOL m_stop;
@property (nonatomic) float m_TimeInterval;
@property (readwrite, copy) NSString *m_PicFileName_LoadingAnimation_Gray;
@property (readwrite, copy) NSString *m_PicFileName_LoadingAnimation_Light;
@end
H
#import "For_Thread_Var.h"
@implementation For_Thread_Var
@synthesize m_PicFileName_LoadingAnimation_Gray;
@synthesize m_PicFileName_LoadingAnimation_Light;
@synthesize m_TimeInterval;
-(id)init
{
[super init];
return self;
}
-(void)dealloc
{
[super dealloc];
}
@end
H文件
#import <Cocoa/Cocoa.h>
@interface QXSDocument : NSPersistentDocument
{
NSThread *m_thread_loading_animation;
}
@property (assign) IBOutlet NSImageView *m_Image_loading_1;
@property (assign) IBOutlet NSImageView *m_Image_loading_2;
@property (assign) IBOutlet NSImageView *m_Image_loading_3;
@property (assign) IBOutlet NSImageView *m_Image_loading_4;
@end
M文件
//
// QXSDocument.m
// learn_loading_pic_change
//
// Created by DMD on 26/8/14.
// Copyright (c) 2014 DMD. All rights reserved.
//
#import "QXSDocument.h"
#import "For_Thread_Var.h"
static bool g_can_click_loading_animation = true;
// Stop for loading animation
static bool g_loading_animation_stop =false;
// Images for loading animation
static NSString *g_PicFileName_LoadingAnimation_Gray=@"c1.png";
static NSString *g_PicFileName_LoadingAnimation_Light=@"c2.png";
@implementation QXSDocument
@synthesize m_Image_loading_1;
@synthesize m_Image_loading_2;
@synthesize m_Image_loading_3;
@synthesize m_Image_loading_4;
- (id)init
{
self = [super init];
if (self) {
// Add your subclass-specific initialization here.
}
return self;
}
- (NSString *)windowNibName
{
// Override returning the nib file name of the document
// If you need to use a subclass of NSWindowController or if your document supports multiple NSWindowControllers, you should remove this method and override -makeWindowControllers instead.
return @"QXSDocument";
}
- (void)windowControllerDidLoadNib:(NSWindowController *)aController
{
[super windowControllerDidLoadNib:aController];
// Add any code here that needs to be executed once the windowController has loaded the document's window.
}
+ (BOOL)autosavesInPlace
{
return YES;
}
//Let's work....
- (IBAction)OnBTClick_Start:(id)sender
{
[self Loading_Animation:g_PicFileName_LoadingAnimation_Gray
PictureLight:g_PicFileName_LoadingAnimation_Light
TimeInterval:0.3f];
}
- (IBAction)OnBTClick_Stop:(id)sender
{
g_loading_animation_stop = true;
}
-(void)Loading_Animation:(NSString*) pic_gray
PictureLight:(NSString*) pic_light
TimeInterval:(float)interval
{
if (true == g_can_click_loading_animation)
{
g_can_click_loading_animation = false;
}
else
{
return ;
}
[self Thread_Todo_Loading_Animation:pic_gray
PictureLight:pic_light
TimeInterval:interval];
}
/************************************
Function : Thread for show load......
2014-08-27 By DMD in ShenZhen
************************************/
-(void)Thread_Todo_Loading_Animation:(NSString*) pic_gray
PictureLight:(NSString*) pic_light
TimeInterval:(float)interval
{
g_loading_animation_stop = false ;
//次线程,需要申明
For_Thread_Var *my_var = [[[For_Thread_Var alloc] init] autorelease];
my_var.m_PicFileName_LoadingAnimation_Gray =pic_gray;
my_var.m_PicFileName_LoadingAnimation_Light =pic_light;
my_var.m_TimeInterval =interval;
id thread_id=nil;
thread_id=(id)my_var;
//次线程,需要申明
m_thread_loading_animation=[[NSThread alloc] initWithTarget:self selector:@selector(Thread_Todo_Loading_Animation_Function:) object:thread_id];
// m_thread_loading_animation = [[NSThread alloc] initWithTarget:self selector:@selector(thread_do_load_function:) object:nil];
//次线程开始
[m_thread_loading_animation start];
}
-(void)Thread_Todo_Loading_Animation_Function:(id)data
{
For_Thread_Var *my_var=data;
[self ToDo_Loading_Animation:my_var.m_PicFileName_LoadingAnimation_Gray
PictureLight:my_var.m_PicFileName_LoadingAnimation_Light
TimeInterval:my_var.m_TimeInterval];
g_can_click_loading_animation = true;
[m_thread_loading_animation cancel];
m_thread_loading_animation = nil;
}
/***************************************************
Loading Animation thinking
start : picture control : hide -> show
step 1 : show all picture control is gray png
step 2 : starting form 1 to 2,3,4 (Loop)
step 3 : if g_stop is true , to break!
stop : picture control : show -> hide
2014-08-27 by DMD
**************************************************/
-(void)ToDo_Loading_Animation:(NSString*) pic_gray
PictureLight:(NSString*) pic_light
TimeInterval:(float)interval
{
[self loading_image_set_hiddle:FALSE];
[self loading_image_start:pic_gray];
int i=1;
int pos=0;
int mod_int = 0;
for (;i<100;i++)
{
pos++;
if(false == g_loading_animation_stop )
{
[self loading_image_light:pic_light
GrayPicFileName:pic_gray
IndexPosition:pos];
}
else
{
[self loading_image_set_hiddle:TRUE];
break;
}
mod_int = i%4;
if (mod_int == 0 )
{
pos = 0;
}
[NSThread sleepForTimeInterval:interval];
}
}
/************************************
Function : Hidden or showed all picture
is_show : TRUE (Hidden)
FALSE (FALSE)
2014-08-27 By DMD in ShenZhen
************************************/
-(void) loading_image_set_hiddle:(BOOL)is_show
{
<p style="margin-top: 0px; margin-bottom: 0px; font-size: 13px; font-family: 'Heiti SC Light'; color: rgb(0, 132, 0); "><span style="font-family: Menlo; color: rgb(0, 0, 0); "> </span><span style="font-family: Menlo; ">//</span><span style="font-family: 'Hiragino Kaku Gothic ProN'; ">在</span><span style="font-family: Menlo; ">View</span><span style="font-family: 'Hiragino Kaku Gothic ProN'; ">里面有一些按</span>钮无法刷新,需要用时间间隔一些时间就可以了</p><p style="margin-top: 0px; margin-bottom: 0px; font-size: 13px; font-family: Menlo; color: rgb(61, 29, 129); "><span style="color: #000000"> [</span><span style="color: #703daa">NSThread</span><span style="color: #000000"> </span>sleepForTimeInterval<span style="color: #000000">:</span><span style="color: #272ad8">0.6f</span><span style="color: #000000">];</span></p><p style="margin-top: 0px; margin-bottom: 0px; font-size: 13px; font-family: Menlo; min-height: 15px; "> </p> [m_Image_loading_1 setHidden:is_show];
[m_Image_loading_2 setHidden:is_show];
[m_Image_loading_3 setHidden:is_show];
[m_Image_loading_4 setHidden:is_show];
}
/************************************
Function : Showed all picture (Gray)
2014-08-27 By DMD in ShenZhen
************************************/
-(void) loading_image_start:(NSString *)pic_name
{
NSImage *image = [NSImage imageNamed:pic_name];
[m_Image_loading_1 setImage:image];
[m_Image_loading_2 setImage:image];
[m_Image_loading_3 setImage:image];
[m_Image_loading_4 setImage:image];
}
/************************************
Function : Showed all picture (Light picture and others is Gray picture)
pic_name : Light Picture FileName
pic_file_name : Gray Picture FileName
2014-08-27 By DMD in ShenZhen
************************************/
-(void) loading_image_light:(NSString *)pic_name
GrayPicFileName:(NSString*)pic_file_name
IndexPosition:(NSInteger)pos
{
NSImage *image = [NSImage imageNamed:pic_name];
NSImage *image_gray = [NSImage imageNamed:pic_file_name];
switch (pos)
{
case 1:
{
[m_Image_loading_1 setImage:image];
[m_Image_loading_2 setImage:image_gray];
[m_Image_loading_3 setImage:image_gray];
[m_Image_loading_4 setImage:image_gray];
break;
}
case 2:
{
[m_Image_loading_2 setImage:image];
[m_Image_loading_1 setImage:image_gray];
[m_Image_loading_3 setImage:image_gray];
[m_Image_loading_4 setImage:image_gray];
break;
}
case 3:
{
[m_Image_loading_3 setImage:image];
[m_Image_loading_2 setImage:image_gray];
[m_Image_loading_1 setImage:image_gray];
[m_Image_loading_4 setImage:image_gray];
break;
}
case 4:
{
[m_Image_loading_4 setImage:image];
[m_Image_loading_2 setImage:image_gray];
[m_Image_loading_3 setImage:image_gray];
[m_Image_loading_1 setImage:image_gray];
break;
}
default:
break;
}
}
@end