Ios UILabel集文本在动画期间绘制在旧文本上
如果你能帮我,我很难理解到底出了什么问题,那太好了 我有一个Ios UILabel集文本在动画期间绘制在旧文本上,ios,objective-c,multithreading,Ios,Objective C,Multithreading,如果你能帮我,我很难理解到底出了什么问题,那太好了 我有一个UIlabel被UIView AnimationWithDuration设置动画,就像一个字幕。。。(我需要使此代码正常工作,我不能在其他地方分叉。请不要提供字幕代表。) 在这个动画中,我设置了一个新的文本,不幸的是,前一个文本不是替换的,而是画在上面的。我最终得到了两个相互重叠的文本。如果我尝试再次设置文本,它可能会被清理,也可能会被画上第三行 我试过下面的代码,认为这可能是线程问题,但它没有做任何事情 @synchronized (
UIlabel
被UIView AnimationWithDuration
设置动画,就像一个字幕。。。(我需要使此代码正常工作,我不能在其他地方分叉。请不要提供字幕代表。)
在这个动画中,我设置了一个新的文本,不幸的是,前一个文本不是替换的,而是画在上面的。我最终得到了两个相互重叠的文本。如果我尝试再次设置文本,它可能会被清理,也可能会被画上第三行
我试过下面的代码,认为这可能是线程问题,但它没有做任何事情
@synchronized (self.songLabel.text) {
self.songLabel.text = nil;
self.songLabel.text = [trackItems objectForKey:@"TrackName"];
}
我已经将我的songLabel
getter和setter设置为原子,这也没有帮助
我不知道该怎么做。。。谢谢你的帮助
编辑:以下是处理动画的代码
- (void)animateSongLabel
{
if (!self.player.rate) {
[UIView animateWithDuration:.5 animations:^{
self.songLabel.left = 25.f;
}];
return;
}
if (!self.canAnimateLabel) {
return;
}
self.animateLabel = NO;
[UIView animateWithDuration:.25 delay:0. options:UIViewAnimationOptionCurveLinear animations:^{
self.songLabel.left -= 15.f;
} completion:^(BOOL finished) {
self.animateLabel = YES;
if (self.songLabel.right < -10.f) {
self.songLabel.left = 320.f;
}
[self animateSongLabel];
}];
}
-(无效)动画标签
{
如果(!self.player.rate){
[UIView animateWithDuration:.5个动画:^{
self.songlab.left=25.f;
}];
返回;
}
如果(!self.canAnimateLabel){
返回;
}
self.animateLabel=否;
[UIView animateWithDuration:.25延迟:0。选项:UIView AnimationOption曲线动画:^{
self.songlab.left-=15.f;
}完成:^(布尔完成){
self.animateLabel=是;
如果(self.songlab.right<-10.f){
self.songlab.left=320.f;
}
[自我动画标签];
}];
}
为什么它是多线程的?你能完整地显示你的标签创建代码和动画块吗?我已经编辑了我的文章。标签在viewController xib文件中实例化。如果你有想法,谢谢你!据我所知,UILabel不允许将“left”设置为属性。您使用的是不同的子类吗?是的,我使用的是UIView+helper它没有做任何特殊的事情,只是简化了框架修改,它非常整洁,使代码干净。如果你想要,我可以和你分享