gpt4 book ai didi

iphone - NSTimer scheduleTimerWithTimeInterval 和 CoreAnimation

转载 作者:行者123 更新时间:2023-12-01 19:10:29 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to make marquee UILabel / UITextField / NSTextField

(1 个回答)


8年前关闭。




我正在编写一个使用动画文本的 cocoa 控件的应用程序,

https://www.cocoacontrols.com/controls/marqueelabel

它使用 CoreTextQuartzCore .

这是一个非常棒的控制,但我遇到了麻烦。
当实例化我使用控件创建的动画标签时立即开始滚动,但是我发现当我使用 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");
}


}

最佳答案

问题是你调用 updatePrice每 5 秒一次,在此方法中 您正在创建一个新标签,即堆叠 向上,并注意它每 5 秒变暗一次。

如果您检查标签正在滚动。

解决方案:

如果您想要标签的多个实例,请更改其坐标。

如果您想要单个实例,则比较检查并仅创建一次。

关于iphone - NSTimer scheduleTimerWithTimeInterval 和 CoreAnimation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16870968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com