NSImageView 实现跑马灯效果

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值