天堂向右,我依然向左

天下之大,虽离家千里,何处不可往!何事不可为!
生活之路,纵坎坷曲折,当奋斗不息,则精彩纷呈!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

    走马灯效果实现原理,就是利用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(00, w, 40)];
    [titleLabel setBounds:CGRectMake(
00, 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(00, width, 40)];
    [scroll addSubview:titleLabel];
    controller.navigationItem.titleView 
= scroll;

    [titleLabel release];
    [scroll release];
    
}

 

 

posted on 2010-09-17 12:33  老舟  阅读(1833)  评论(0编辑  收藏  举报