gpt4 book ai didi

ios - 独立线程上独立运行的文本行

转载 作者:行者123 更新时间:2023-11-29 04:39:02 28 4
gpt4 key购买 nike

已更新
我想制作运行文本行,哪种方式更好?

 -(void)viewDidLoad
{
CGSize mySize = CGSizeZero;
mySize = [kGrindFMRunningText sizeWithFont:[UIFont fontWithName:@"Verdana" size:16] constrainedToSize:CGSizeMake(4000, 30) lineBreakMode:UILineBreakModeWordWrap];

runningText = [[UIScrollView alloc] initWithFrame:CGRectMake(60, -5, 260, 50)];
grind_fm_text = [[UILabel alloc] initWithFrame:CGRectMake(0, 15, mySize.width, 30)];
[grind_fm_text setUserInteractionEnabled:NO];
[grind_fm_text setBackgroundColor:[UIColor clearColor]];
[grind_fm_text setTextColor:[UIColor whiteColor]];
[grind_fm_text setFont:[UIFont fontWithName:@"Verdana" size:16]];
[grind_fm_text setText:kGrindFMRunningText];
[runningText addSubview:grind_fm_text];
[grind_fm_text release];
[self animate];
}


- (void)animate
{
[UIView animateWithDuration:10.0 delay:0. options:UIViewAnimationOptionCurveLinear|UIViewAnimationOptionBeginFromCurrentState animations:^{
grind_fm_text.frame = CGRectMake(-grind_fm_text.frame.size.width, 15, grind_fm_text.frame.size.width, grind_fm_text.frame.size.height);
// Do your animation in one direction until text is gone
} completion:^(BOOL finished){
grind_fm_text.frame = CGRectMake(260, 15, grind_fm_text.frame.size.width, grind_fm_text.frame.size.height);
// Move scroll position back to original position
[self animate]; // Then call animate again to repeat
}];
}

-(void)songChange
{
CGSize mySize = CGSizeZero;
mySize = [result sizeWithFont:[UIFont fontWithName:@"Verdana" size:16] constrainedToSize:CGSizeMake(4000, 30) lineBreakMode:UILineBreakModeWordWrap];
grind_fm_text.frame = CGRectMake(grind_fm_text.frame.origin.x, 15, mySize.width, 30);
grind_fm_text.text = result;;
[self animate];
}

- (void)startStopStream {
[streamer stop];
//[bufferIndicator stopAnimating];
[CATransaction begin];
[self.view.layer removeAllAnimations];
[CATransaction commit];
grind_fm_text.text = kGrindFMRunningText;
CGSize mySize = CGSizeZero;
mySize = [kGrindFMRunningText sizeWithFont:[UIFont fontWithName:@"Verdana" size:16] constrainedToSize:CGSizeMake(4000, 30) lineBreakMode:UILineBreakModeWordWrap];
grind_fm_text.frame = CGRectMake(grind_fm_text.frame.origin.x, 15, mySize.width, 30);
[self animate];
}

[CATransaction 开始]; [myView.layer 移除所有动画]; [CATransaction commit]; 对我不起作用。 UIViewAnimationOptionCurveLinear|UIViewAnimationOptionBeginFromCurrentState 的工作方式很奇怪:首先,它不会像我看到的那样执行完成 block ,或者可能会执行,但动画不会再次开始。如果我单击按钮没有任何反应,但是当我第二次单击它时,动画从另一个方向开始并减慢直至卡住。

最佳答案

您应该能够使用嵌套的 UIView 动画 block 更简单地完成此操作。在动画 block 中让它沿一个方向滚动,在完成 block 中让它沿另一个方向滚动,在该动画的完成 block 中让它再次调用您的动画函数,以便重复。

类似这样的事情:

- (void)animate
{
[UIView animateWithDuration:10.0 delay:0. options:UIViewAnimationOptionCurveLinear animations:^{
// Do your animation in one direction
} completion:^(BOOL finished){
[UIView animateWithDuration:10.0 delay:0. options:UIViewAnimationOptionCurveLinear animations:^{
// Do your animation in the other direction
} completion:^(BOOL finished){
[self animate];
}];
}];
}

或者,如果您希望它一直滚动,请再次执行此操作,例如:

- (void)animate
{
[UIView animateWithDuration:10.0 delay:0. options:UIViewAnimationOptionCurveLinear animations:^{
// Do your animation in one direction until text is gone
} completion:^(BOOL finished){
// Move scroll position back to original position
[self animate]; // Then call animate again to repeat
}];
}

听起来默认情况下,动画使用 UIViewAnimationOptionCurveEaseInOut动画选项。您想要UIViewAnimationOptionCurveLinear选项。我已经更新了上面的代码以包含该内容。


根据此问题的答案:Cancel a UIView animation?您应该可以通过调用 [myView.layer removeAllAnimations]; 来取消动画其中 myView 是正在动画的 ScrollView 。确保导入<QuartzCore/QuartzCore.h>访问 CALayer 方法。

编辑:您可能需要这样调用它,以确保它立即运行,而不是在下一次运行循环迭代之后运行:

[CATransaction begin];
[myView.layer removeAllAnimations];
[CATransaction commit];
或者,如果这仍然不起作用,那么可能只需将 UIView 方法调用中的选项参数更改为 UIViewAnimationOptionCurveLinear|UIViewAnimationOptionBeginFromCurrentState应该可以工作,不需要调用removeAllAnimations。事实上,首先尝试一下。

关于ios - 独立线程上独立运行的文本行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10668407/

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