【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];
}
走马灯效果实现原理,就是利用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];
}
相关文章推荐
- [iOS开发技巧之]iPhone走马灯控件实现
- Objective-C ,ios,iphone开发基础:picker控件详解与使用,(实现省市的二级联动)
- iPhone走马灯控件实现
- Objective-C ,ios,iphone开发基础:picker控件详解与使用,(实现省市的二级联动)
- iPhone走马灯控件实现
- Objective-C ,ios,iphone开发基础:picker控件详解与使用,(实现省市的二级联动)
- iPhone走马灯控件实现
- iOS cocos2d实现slider(滑块)控件效果源码
- iOS cocos2d实现slider(滑块)控件效果源码
- [IOS_UI控件]IPHONE应用开发 - 打开和关闭键盘
- android仿iPhone滚轮控件实现及源码
- iOS网络编程实践--NSStream实现TCP Socket iPhone客户端
- iOS - 利用UILayer实现扁平化控件、带弧度的UIButton、圆形的UIImageView:
- iOS开发UI篇—UIScrollView控件实现图片缩放功能
- ios学习--iphone 实现下拉菜单
- iOS网络编程实践--NSStream实现TCP Socket iPhone客户端
- [开源]在iOS上实现Android风格的控件Toast
- iOS开发_iPhone 实现剪贴板操作_iPhone 复制粘贴功能
- iOS开发UI篇—UIScrollView控件实现图片轮播
- iOS代码实现常用控件之Slider 文字缩放