[iOS開發技巧之]iPhone走馬燈控件實現

本文來源:http://www.cnblogs.com/KiloNet/archive/2010/09/17/1829155.html

 走馬燈效果實現原理,就是利用iPhone自帶的動畫來控制UILable的y軸位置:

    代碼如下:

//LampText.h
@interface LampText : UILabel {
    float motionWidth;
}
@property (nonatomic)   float motionWidth;
@end



//LampText.m
#import "LampText.h"

@implementation LampText
@synthesize motionWidth;

- (id)initWithFrame:(CGRect)frame {
    if ((self = [super initWithFrame:frame])) {
        motionWidth = 200;
    }
    return self;
}

- (void)drawRect:(CGRect)rect {
    
    [super drawRect:rect];
    float w  = self.frame.size.width;
    if (motionWidth>=w) {
        return;
    }
    
    CGRect frame = self.frame;
    frame.origin.x = 320;
    self.frame = frame;
    
    [UIView beginAnimations:@"testAnimation" context:NULL];
    [UIView setAnimationDuration:8.0f * (w<320?320:w) / 320.0 ];  
    [UIView setAnimationCurve:UIViewAnimationCurveLinear];     
    [UIView setAnimationDelegate:self];  
    [UIView setAnimationRepeatAutoreverses:NO];     
    [UIView setAnimationRepeatCount: LONG_MAX]; 
    
    frame = self.frame;
    frame.origin.x = -w ;
    self.frame = frame;
    [UIView commitAnimations];  
}

- (void)dealloc {
    [super dealloc];
}

@end

//調用:
   NSString *title = @"Hi,kilonet, weclome to my blog!";
    CGFloat w = [title sizeWithFont:[UIFont fontWithName:@"Arial" size:18]].width;
    LampText *titleLabel = [[LampText alloc]initWithFrame:CGRectMake(0, 0, w, 40)];
    [titleLabel setBounds:CGRectMake(0, 0, w, 40)]; 
    titleLabel.lineBreakMode = UILineBreakModeClip;
    titleLabel.text = title;
    titleLabel.textAlignment = UITextAlignmentCenter;
    titleLabel.font = [UIFont fontWithName:@"Arial" size:18];
    titleLabel.textColor = [UIColor whiteColor];
    titleLabel.backgroundColor = [UIColor clearColor];
    //[titleLabel sizeToFit];
    
    [self.view addSubview: titleLabel];
    [titleLabel release];


其它擴展:

在Navigation裏實現跑馬燈效果,因爲Navigation的寬度限制了,所以須使用下面代碼調用:

+(void) showNavTitle:(UIViewController *)controller title:(NSString *)title  {
    [Utilitys showNavTitle:controller title:title width:320.0];
}

+(void) showNavTitle:(UIViewController *)controller title:(NSString *)title width:(CGFloat) width {

    CGFloat w = [title sizeWithFont:[UIFont fontWithName:@"Arial" size:18]].width;
    CGFloat x = 0;
    if (w <= width) {
        x = (width - w) / 2;
    }
    
    LampText *titleLabel = [[LampText alloc]initWithFrame:CGRectMake(x, 0, w, 40)];
    titleLabel.motionWidth = width;
    titleLabel.lineBreakMode = UILineBreakModeClip;
    titleLabel.text = title;
    titleLabel.textAlignment = UITextAlignmentCenter;
    titleLabel.font = [UIFont fontWithName:@"Arial" size:18];
    titleLabel.textColor = [UIColor whiteColor];
    titleLabel.backgroundColor = [UIColor clearColor];

    UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, width, 40)];
    [scroll addSubview:titleLabel];
    controller.navigationItem.titleView = scroll;

    [titleLabel release];
    [scroll release];
    
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章