本文来源: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];
- }