iPhone走马灯控件实现

走马灯效果实现原理,就是利用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];
    
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值