走马灯效果实现原理,就是利用iPhone自带的动画来控制UILable的y轴位置:
代码如下:
![](https://i-blog.csdnimg.cn/blog_migrate/81178cc93a2a3bb5048d90d76e7ec935.gif)
//
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];
@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的宽度限制了,所以须使用下面代码调用:
![](https://i-blog.csdnimg.cn/blog_migrate/81178cc93a2a3bb5048d90d76e7ec935.gif)
+
(
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];
}
[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];
}