您的位置:首页 > 移动开发 > IOS开发

【iOS解决方案】iPhone走马灯控件实现

2015-05-08 09:56 148 查看
本文来源:http://www.cnblogs.com/KiloNet/archive/2010/09/17/1829155.html

走马灯效果实现原理,就是利用iPhone自带的动画来控制UILable的y轴位置:

代码如下:

[cpp] view
plaincopy

//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的宽度限制了,所以须使用下面代码调用:

[cpp] view
plaincopy

+(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];



}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: