我尝试从左到右滚动我的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 goingif (ps * _direction > 0) [self scrollText:self timeConstant:_timeconstant timeOffset:_timeoffset direction:_direction];}
现在的问题是,视图不会更新:(我不确定这是否是这种动画的最佳方法.
解决方法 我认为你的视图没有更新,因为你永远不会打破递归,因此运行循环永远不会完成迭代.比递归方法更好的解决方案可能是使用NSTimer,使用[NSTimer timerWithTimeInterval:target:selector:userInfo:repeats:]每隔一次,例如1/30或1/60秒触发您的函数.如果你想保留你在这里的递归结构,你可以使用 – [NSObject performSelector:withObject:afterDelay:]在延迟后调用你的函数.只需使用1 / 60.0之类的延迟,并将所需的任何信息打包到字典或数组中以传递给withObject:参数.
这些方法中的任何一个都使用运行循环注册您的方法以便稍后调用.这允许运行循环开始新的迭代,这意味着可以发生UI更新.
编辑:如果您的字符串在此动画期间未更改,请计算文本大小一次并将其存储在实例变量中.在每次调用方法期间计算字符串的大小可能很昂贵.
总结以上是内存溢出为你收集整理的ios – 滚动文本 – 自定义动画全部内容,希望文章能够帮你解决ios – 滚动文本 – 自定义动画所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)