- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
注意:请不要评论这是否是个好主意;)我只是在试验所以想看看结果如何...
我有一个 UITextView
和一些 inputText
,我要将其设置为 UITextView
的文本。
我想尝试以视觉方式将 inputText
滴入 TextView ,比如说,一次一个字母或一个单词。
例如(不考虑滴灌延迟或执行线程):
for (NSInteger i = 0; i < inputText.length; i++) {
NSString* charAtIndex = [text substringWithRange:NSMakeRange(i, 1)];
_textView.text = [NSString stringWithFormat:@"%@%@", _textView.text, charAtIndex];
}
因此,要构建延迟并查看添加的字符(或单词),一次一个,我可以执行以下操作:
dispatch_queue_t backgroundQueue = dispatch_queue_create("background_queue", 0);
for (NSInteger i = 0; i < inputText.length; i++) {
dispatch_async(backgroundQueue, ^{
[NSThread sleepForTimeInterval:0.01f];
NSString* charAtIndex = [inputText substringWithRange:NSMakeRange(i, 1)];
dispatch_async(dispatch_get_main_queue(), ^{
_textView.text = [NSString stringWithFormat:@"%@%@", _textView.text, charAtIndex];
});
});
}
一切正常,正如预期的那样,for 循环正在后台队列中排队一堆异步操作。
但我希望以上内容作为更大的、单一的同步可视化的一部分发生。在添加此代码以滴灌 UITextView
之前,我只是在 UITextView
中设置文本,然后为当前 View 设置动画(包括 UITextView
) 屏幕外。都在主线程上。用户会点击一个按钮,看到整个文本出现,然后 View 开始动画离开屏幕,马上。然后,用户继续进行工作流程中的下一步。
我正在尝试滴灌可视化,给人一种 TextView 一次填充一个字符(或单词)的印象,但我不希望用户必须等到每个最后一个字符/单词已添加。因此,我希望看到 UITextView
被填充,例如 0.3 或 0.5 秒,然后再开始为 View (包括 UITextView
)设置动画的动画-屏幕…
所以它有点像这样:
dispatch_queue_t backgroundQueue = dispatch_queue_create("background_queue", 0);
for (NSInteger i = 0; i < inputText.length; i++) {
dispatch_async(backgroundQueue, ^{
[NSThread sleepForTimeInterval:0.01f];
NSString* charAtIndex = [inputText substringWithRange:NSMakeRange(i, 1)];
dispatch_async(dispatch_get_main_queue(), ^{
_textView.text = [NSString stringWithFormat:@"%@%@", _textView.text, charAtIndex];
});
});
}
// ...
// Animate the view (including the UITextView) off screen
// ...
// User continues with the main workflow
现在,由于所有滴灌在后台异步发生,一旦我添加代码以动画化 View ,您就会错过视觉滴灌。主线程一直运行到为屏幕外的 View 设置动画。
我不确定如何实现我想要的?
我是否以某种方式中断了上述循环?检查从另一个线程更新的标志?
我不能在主线程上等待 - 因为它会阻止对 UITextView
的滴灌更新......
有什么建议吗?
最佳答案
您可以延迟动画以“给”滴灌时间,如下所示:
double delayInSeconds = 0.5f;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
// ...
// Animate the view (including the UITextView) off screen
// ...
});
这样用户将看到 0.5 秒的点滴动画。这是 GCD 版本,但您也可以使用该方法:
[UIView animateWithDuration:0.3f // Set your duration here
delay:0.5f
options:UIViewAnimationOptionCurveEaseOut // Choose the right option here
animations:^{
// Do your animations here.
}
completion:^(BOOL finished){
if (finished) {
// Do your method here after your animation.
}
}];
关于iOS - 如何在设定的时间后中断异步后台操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22456371/
我想成为 Spark 纱客户(link)。是否需要安装hadoop?还是只安装 yarn 可以吗? (by this link) 最佳答案 No Spark不需要Hadoop即可运行。 Apache
我是一名优秀的程序员,十分优秀!