【发布时间】:2013-06-01 08:57:55
【问题描述】:
我正在使用可可控件编写一个应用程序,该控件可以为文本设置动画,
https://www.cocoacontrols.com/controls/marqueelabel
它使用CoreText 和QuartzCore。
这是一个非常棒的控制,但我遇到了麻烦。
当实例化我使用控件创建的动画标签时立即开始滚动,但是我发现当我使用NSTimer 创建动画标签时它没有动画。
我正在使用
- (void)viewDidLoad
{
[super viewDidLoad];
....
[self.view addSubview:continuousLabel1];
[NSTimer scheduledTimerWithTimeInterval:5
target:self
selector:@selector(updatePrice)
userInfo:nil repeats:YES];
}
调用创建动画标签的方法,当我直接调用该方法时,标签会创建和动画,但是当使用上述预定计时器调用时,新标签仅在第一次调用时创建动画,而不是在计时器重复调用时到方法。 我已经检查过我的方法正在主线程/主运行循环上被调用,有什么想法吗?
为了清楚起见,工作流程是:
定时器调用方法 --> 标签 1 被创建并开始动画化。
晚了 5 秒...
定时器再次调用方法 --> 标签 2 已创建但是没有按预期开始动画。
编辑:
- (void)updatePrice
{
MarqueeLabel *continuousLabel2 = [[MarqueeLabel alloc] initWithFrame:CGRectMake(10, 230, self.view.frame.size.width-20, 20) rate:100.0f andFadeLength:10.0f];
continuousLabel2.tag = 101;
continuousLabel2.marqueeType = MLContinuous;
continuousLabel2.animationCurve = UIViewAnimationOptionCurveLinear;
continuousLabel2.continuousMarqueeExtraBuffer = 50.0f;
continuousLabel2.numberOfLines = 1;
continuousLabel2.opaque = NO;
continuousLabel2.enabled = YES;
continuousLabel2.shadowOffset = CGSizeMake(0.0, -1.0);
continuousLabel2.textAlignment = NSTextAlignmentLeft;
continuousLabel2.textColor = [UIColor colorWithRed:0.234 green:0.234 blue:0.234 alpha:1.000];
continuousLabel2.backgroundColor = [UIColor clearColor];
continuousLabel2.font = [UIFont fontWithName:@"Helvetica-Bold" size:17.000];
continuousLabel2.text = @"This is another long label that doesn't scroll continuously with a custom space between labels! You can also tap it to pause and unpause it!";
[self.view addSubview:continuousLabel2];
if( [NSThread isMainThread])
{
NSLog(@"In Main Thread");
}
if ([NSRunLoop currentRunLoop] == [NSRunLoop mainRunLoop]) {
NSLog(@"In Main Loop");
}
}
【问题讨论】:
-
昨天我在marquee上给出了答案
-
你读过这个问题吗?我确切地知道如何创建一个选取框,我的问题不是重复的,甚至与您建议的问题不太相似。当标签被 NSTimers 重复调用实例化时,标签上的动画无法发生。
-
由于您的问题未在代码中显示,我认为答案会对您有所帮助。我看到的一个区别是我有一个属性启动并使计时器无效。在你的情况下,我不确定你从哪里和多少次调用
myMethod....链接和欺骗可能与你想要的有 80-100% 的相似性。 -
Anoop,这就像我们在谈论完全不同的问题。[NSTimer scheduledTimerWithTimeInterval,每 5 秒调用一次 myMethod,而且您不必将其无效,因为它是一个类方法。]
-
有人知道为什么当计时器重复触发时,选择器方法中的核心动画会失败吗?
标签: iphone ios objective-c core-animation nstimer