- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试创建一种效果,其中三个箭头交替地从可见变为不可见。
我做了一个简单的算法,其中每个箭头都从不同的 alpha 值开始(如果有 3 个箭头,第一个将从 alpha=1 开始,第二个从 alpha=0.6667 开始,第三个从 alpha=0.3337 开始).然后我开始一个关键帧动画:
然而,由于某些原因似乎跳过了某些步骤。
一个简单的例子:
[UIView animateKeyframesWithDuration:2 delay:0 options:UIViewKeyframeAnimationOptionCalculationModeLinear | UIViewKeyframeAnimationOptionRepeat animations:^{
[UIView addKeyframeWithRelativeStartTime:0 relativeDuration:0 animations:^{
_animatedView.alpha = 0.5;
}];
[UIView addKeyframeWithRelativeStartTime:0 relativeDuration:0.5 animations:^{
_animatedView.alpha = 0;
}];
[UIView addKeyframeWithRelativeStartTime:0.5 relativeDuration:0 animations:^{
_animatedView.alpha = 1;
}];
[UIView addKeyframeWithRelativeStartTime:0.5 relativeDuration:0.5 animations:^{
_animatedView.alpha = 0.5;
}];
} completion:nil];
在那种情况下,它应该立即变为 0.5,1 秒内从 0.5 变为 0,立即变为 1,1 秒内从 1 变为 0.5。因此,它应该做一个无缝过渡,看起来像 View 出现和消失,但看起来动画在 alpha=0.5 上停留了一段时间。
理论上和使用这个关键帧动画效果应该是一样的:
[UIView animateKeyframesWithDuration:2 delay:0 options:UIViewKeyframeAnimationOptionCalculationModeLinear | UIViewKeyframeAnimationOptionRepeat animations:^{
[UIView addKeyframeWithRelativeStartTime:0 relativeDuration:0 animations:^{
_animatedView.alpha = 1;
}];
[UIView addKeyframeWithRelativeStartTime:0 relativeDuration:1 animations:^{
_animatedView.alpha = 0;
}];
} completion:nil];
最佳答案
如果您想以相同的方式为 N 个 View 设置动画:
CGFloat count = [self.animatedViews count];
CGFloat period = 1.0f / count;
__weak NSArray *weakViews = self.animatedViews;
[UIView animateKeyframesWithDuration:2.0f delay:0 options:UIViewKeyframeAnimationOptionCalculationModeLinear | UIViewKeyframeAnimationOptionRepeat animations:^{
for (NSUInteger index = 0; index < count; ++index) {
UIView *animatedView = weakViews[index];
CGFloat startDelay = period * index;
[UIView addKeyframeWithRelativeStartTime:0 relativeDuration:0 animations:^{
animatedView.alpha = startDelay;
}];
[UIView addKeyframeWithRelativeStartTime:0.0f relativeDuration:startDelay animations:^{
animatedView.alpha = 0.0f;
}];
[UIView addKeyframeWithRelativeStartTime:startDelay relativeDuration:0.0f animations:^{
animatedView.alpha = 1.0f;
}];
[UIView addKeyframeWithRelativeStartTime:startDelay relativeDuration:(1.0f - startDelay) animations:^{
animatedView.alpha = startDelay;
}];
}
} completion:nil];
关于ios - 使用 [UIView animateKeyframesWithDuration] 为 UIView 设置动画的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25552811/
我使用 animateKeyframesWithDuration 为我的 View 制作简单的动画: [UIView animateKeyframesWithDuration:1.0 delay:0.
我添加了一个连续运行的相对简单的动画。这用于短暂切换到另一个 View 几秒钟。 当动画运行时,iPhone 6 (iOS 9.2.1) 上的 GPU 从 <5% 跃升至恒定的 30-40%,而模拟器
我很困惑为什么这不起作用。我这三个事件接连发生。第一个缩小和缩小图像,第二个在背景中淡入淡出,第三个为第一张图像设置动画。但它实际上是反过来发生的吗?我做了什么傻事吗? [UIView ani
我正在尝试编写一个闪烁的动画,但感觉时间不对。我在 Playground 上做了一个简单的版本: import UIKit import XCPlayground let v = UIView() v
我尝试使用下面的代码在屏幕上创建一个连续旋转的正方形。但我不知道为什么转速在变化。我怎样才能改变代码使转速不变?我尝试了不同的 UIViewKeyframeAnimationOptions,但似乎都不
我有一个带有关键帧动画的 iOS 应用。最后一个关键帧即将结束时,我的应用程序崩溃并出现此错误: *** Terminating app due to uncaught exception 'NSR
我想在 View 中添加心跳效果,一种方法是使用 UIView 的动画方法,如下所示: - (void)heartBeating { UIView *panel; NSTimeInte
我想创建一些在它们之间有延迟的动画,所以我决定使用 UIView.animateKeyframesWithDuration:delay:options:animations:completion:。
我正在尝试创建一种效果,其中三个箭头交替地从可见变为不可见。 我做了一个简单的算法,其中每个箭头都从不同的 alpha 值开始(如果有 3 个箭头,第一个将从 alpha=1 开始,第二个从 alph
我最近发现了一些 UIView 动画代码,并注意到它没有正确使用 animateKeyframesWithDuration:delay:options:animations:completion: 方
我是一名优秀的程序员,十分优秀!