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它没有做任何特殊的事情,只是简化了框架修改,它非常整洁,使代码干净。如果你想要,我可以和你分享