我试图将属性设置为原子,但它似乎无论如何都不起作用。这是代码。它会移动一个标签,显示正在播放的歌曲名称。有时它开始抖动,好像标签应该同时在两个地方。任何线索?一些锁定属性可能......
- (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];
}];
}
答案 0 :(得分: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;