[iOS开发技巧之]iPhone走马灯控件实现

来源:互联网 发布:矩阵的作用 编辑:程序博客网 时间:2024/06/15 20:20

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


原创粉丝点击