gpt4 book ai didi

objective-c - 将 CAMediaTimingFunction 与基于 block 的 UIView 动画一起使用

转载 作者:搜寻专家 更新时间:2023-10-30 20:01:01 25 4
gpt4 key购买 nike

View Programming Guide for iOS告诉我们基于 block 的动画是前进的方向,而不是现在几乎被弃用的 begin/commit 风格的动画:

Note: If you are writing an application for iOS 4 or later, you should use the block-based methods for animating your content instead. For information on how to use those methods, see “Starting Animations Using the Block-Based Methods.”

但现在我处于需要使用自定义计时函数的情况 CAMediaTimingFunction所以我求助于使用 CATransactionCABasicAnimation。这些类使用与已弃用的 UIView 动画样式相同的语义语言,方法包括 [CATransaction begin][CATransaction commit]。在其他一切都是基于 block 的应用程序中间感觉很奇怪。

有没有办法将 CAMediaTimingFunction 等概念与基于 block 的动画相结合?

更新 1:

我想“阻止”的一段示例代码如下所示:*

[CATransaction begin];
{
[CATransaction setValue:[NSNumber numberWithFloat:3.0f] forKey:kCATransactionAnimationDuration];

CGPoint low = CGPointMake(0.150, 0.000);
CGPoint high = CGPointMake(0.500, 0.000);

[CATransaction begin];
{
CAMediaTimingFunction* perfectIn = [CAMediaTimingFunction functionWithControlPoints:low.x :low.y :1.0 - high.x :1.0 - high.y];
[CATransaction setAnimationTimingFunction: perfectIn];
CABasicAnimation *fadeIn = [CABasicAnimation animationWithKeyPath:@"opacity"];
fadeIn.fromValue = [NSNumber numberWithFloat:0];
fadeIn.toValue = [NSNumber numberWithFloat:1.0];
[viewB.layer addAnimation:fadeIn forKey:@"animateOpacity"];
}
[CATransaction commit];
}
[CATransaction commit];

更新2

我为我的另一个问题制作了一个示例项目,其中包含上述代码。 It's on github .

最佳答案

But now I'm in a situation where I need to use custom timing functions CAMediaTimingFunction so I've resorted to using CATransactions and CABasicAnimations. These classes uses the same semantical language as the deprecated UIView animations style with methods like [CATransaction begin] and [CATransaction commit]. It just feels odd in the middle of apps where everything else is block-based.

我认为您误读了文档。

基于 block 的动画是执行 UIView 动画的方式。时期。句号。

此声明不对应于 CoreAnimation。您仍然必须为 CoreAnimation 使用 begin/commit。不要仅仅因为更高级别的构造 (UIView) 弃用开始/提交就假设 CA 开始和提交是错误的。

Is there a way to combine concepts like the CAMediaTimingFunctions with block-based animations?

  • 如果您需要 Core Anmiation 的高级功能,例如自定义计时,您应该按照预期的方式使用 CoreAnimation(开始/提交等)
  • 如果您尝试为 CALayers 设置动画,请使用 Core Animation。
  • 如果您正在制作基于 UIView 的高级动画,请使用基于 UIView block 的动画。

关于objective-c - 将 CAMediaTimingFunction 与基于 block 的 UIView 动画一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8113323/

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