gpt4 book ai didi

ios - 滚动文本 - 自定义动画

转载 作者:可可西里 更新时间:2023-11-01 06:12:24 26 4
gpt4 key购买 nike

我在互联网上搜索了几个小时,但找不到好的解决方案。

我尝试在 UIView 上从左向右滚动文本,反之亦然。我不想使用 CoreAnimations,因为我需要控制动画。

运动遵循正弦曲线,0 到 pi 或 0->1->0。

实现自定义动画的最佳方式是什么?

经过一些研究,我想出了一个递归算法,它调用自己并通过循环,直到完成。

- (void) scrollText:(id)sender timeConstant:(float) _timeconstant timeOffset:(NSDate*) _timeoffset direction:(int)_direction
{

float p = [[NSDate date] timeIntervalSinceDate:_timeoffset] / _timeconstant * _direction;
float ps = sinf( p * M_PI);


CGSize txtsize = [msg_text sizeWithFont:font];

float offset = txtsize.width / 2;
float screenwidth = self.view.frame.size.width;
float screenheight= self.view.frame.size.height;


int virtualwidth = txtsize.width;
[ivText setFrame:CGRectMake(screenwidth/2 - offset + (virtualwidth / 2 * ps), 100, txtsize.width, txtsize.height)];

//redraw
[[self view] setNeedsDisplay];
//keep going
if (ps * _direction > 0) [self scrollText:self timeConstant:_timeconstant timeOffset:_timeoffset direction:_direction];


}

现在的问题是, View 不会更新 :( 我不确定这是否是此类动画的最佳方法。

最佳答案

我认为您的 View 没有更新,因为您永远不会中断递归,因此运行循环永远不会完成迭代。比递归方法更好的解决方案可能是使用 NSTimer 每隔 1/30 或 1/60 秒触发一次函数,使用 +[NSTimer timerWithTimeInterval:target :selector:userInfo:repeats:].

如果你想保留这里的递归结构,你可以使用 -[NSObject performSelector:withObject:afterDelay:] 在延迟后调用你的函数。只需使用类似 1/60.0 的延迟,并将您需要的任何信息打包到字典或数组中以传递给 withObject: 参数。

这些方法中的任何一个都会将您的方法注册到运行循环中,以便稍后调用。这允许运行循环开始新的迭代,这意味着可以进行 UI 更新。

编辑:如果您的字符串在此动画期间没有变化,请计算一次文本大小并将其存储在实例变量中。在每次调用您的方法期间计算字符串的大小可能会很昂贵。

关于ios - 滚动文本 - 自定义动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7897983/

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