0

プロパティをアトミックに設定しようとしましたが、とにかくうまくいかないようです。これがコードです。再生中の曲名を表示するラベルを移動します。そして、ラベルが同時に 2 か所にあるはずであるかのように、震え始めることがあります。どんな手掛かり ?多分いくつかのロックプロパティ...

- (void)animateSongLabel
    {
        if (!self.player.rate) {

            [UIView animateWithDuration:.5 animations:^{

                self.songLabel.left = 25.f;
            }];
            return;
        }

        [UIView animateWithDuration:.25 delay:0. options:UIViewAnimationOptionCurveLinear animations:^{

             self.songLabel.left -= 15.f;

        } completion:^(BOOL finished) {

            if (self.songLabel.right < -10.f) {

                self.songLabel.left = 320.f;
            }
            [self animateSongLabel];
        }];
    }
4

1 に答える 1

1

そこに座って横にスクロールするテキストを作成する最も簡単な方法は、アニメーション化された UIImage またはアニメーション化された UIImageView を表示することです。テキストを毎回わずかにずらして描画することにより、コードで連続する UIImage オブジェクトを生成し、それらを に渡しますanimatedImageWithImages:duration:。その画像をどこに表示しても、アニメーションになります。

開始するためのサンプル コードを次に示します (目的の効果を正確に得るために微調整します)。

NSString* s = @"Mister Dobbalena, Mister Bob Dobbalena";
NSMutableArray* marr = [NSMutableArray array];
UIFont* f = [UIFont fontWithName:@"Helvetica" size:12];
float w = [s sizeWithFont:f].width;
for (int offset = 0; offset < w; offset++) {
    UIGraphicsBeginImageContextWithOptions(self.iv.frame.size, NO, 0);
    [s drawAtPoint:CGPointMake(10-offset,20) withFont:f];
    [marr addObject: UIGraphicsGetImageFromCurrentImageContext()];
    UIGraphicsEndImageContext();
}
UIImage* im = [UIImage animatedImageWithImages:marr duration:20];
self.iv.image = im;
于 2013-01-15T20:27:02.547 に答える