jjzjj

iOS UIView 动画 CATransform3DMakeRotation 困惑

coder 2024-01-21 原文

我有一个 UIView,我试图为向下翻转设置动画,同时它的轴位于 View 的底部。例如:

为此,我尝试使用 UIView 动画:

[UIView animateWithDuration:3 delay:0 options:UIViewAnimationCurveEaseOut animations:^{

     // Flip Down
     top3.layer.anchorPoint = CGPointMake(0.5, 1.0);
     top3.layer.transform = CATransform3DMakeRotation(M_PI, 1, 0, 0);

 } completion:^(BOOL finished) {

     // Reset?
     //top3.transform = CGAffineTransformMakeScale(1, 1);

 }];

现在它没有按照我想要的方式工作,看起来 View 正在远离用户而不是朝向用户进行动画处理。它似乎没有提供 3D 效果,使其在向下旋转时看起来更接近用户,如我的图片所示。我很肯定这是因为我不了解如何使用 CATransform3DMakeRotation

问题:

  • 如何使 View 在下降时看起来离用户更近?比如在我的图像示例中倾斜它?
  • 当我设置我的 anchorPoint 时,它会向下移动我的视野,我该如何防止这种情况并仍然设置我的 anchorPoint
  • 对于 UIView 动画,我可以使用缓动设置吗? 在选项中使用了 UIViewAnimationCurveEaseOut
  • 我可以使用重力设置吗?

最佳答案

  • 从您的问题中不能完全清楚,但听起来您在动画过程中没有看到透视变形 — View 在旋转时保持矩形,对吧?要使 CALayer 以透视方式显示,其 transform 需要设置 m34 元素,如 here 所述。 .
  • 为了补偿移动 View 层的anchorPoint,您需要更改 View 的原始位置。
  • 是的。除了您正在使用的动画选项之外,还有几个动画选项,您可以像这样组合它们(例如):UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction.
  • Core Animation 实际上没有任何物理概念。根据您想要的效果,您可以通过将多个动画与特定的缓动设置链接在一起来实现它——例如,一个坠落的物体撞击固体表面会在其下降过程中使用“缓入”动画,然后如果它随后反弹,则“缓和”。

关于iOS UIView 动画 CATransform3DMakeRotation 困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8494184/

有关iOS UIView 动画 CATransform3DMakeRotation 困惑的更多相关文章

  1. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  2. LVGL V8动画 - 2

    动画/*INITIALIZEANANIMATION 初始化一个动画*-----------------------*/lv_anim_ta;lv_anim_init(&a);/*MANDATORYSETTINGS 必选设置*------------------*//*Setthe"animator"function 设置“动画”功能*/lv_anim_set_exec_cb(&a,(lv_anim_exec_xcb_t)lv_obj_set_x);/*Setthe"animator"function*/lv_anim_set_var(&a,obj);/*Lengthoftheanim

  3. ruby - 对回文产品问题感到困惑 - 2

    我一直在学习Ruby,所以我想我应该尝试一下项目中的一些Euler难题。尴尬的是,我只完成了问题4...问题4如下:Apalindromicnumberreadsthesamebothways.Thelargestpalindromemadefromtheproductoftwo2-digitnumbersis9009=91×99.Findthelargestpalindromemadefromtheproductoftwo3-digitnumbers.所以我想我会在嵌套的for循环中从999循环到100并测试回文,然后在找到第一个(应该是最大的)时跳出循环:final=nilrang

  4. Ruby enum_for 困惑 - 2

    我正在尝试查找名为Command的特定类型的所有子类在Ruby中,我遇到了以下代码,它完美地完成了这个技巧,但是我真的不明白它是如何工作的,主要是class部分。我已经尝试阅读此内容,但我觉得我仍然缺少一些Ruby魔法。有人可以向我解释一下吗:-)ObjectSpace.enum_for(:each_object,class 最佳答案 class返回Command的单例类.这是Command的唯一(直接)实例的类。在ruby​​中,C的子类的单例类是C的单例类的子类。所以Command的所有子类都有继承自Command的单例类的单例

  5. ruby - 关于 ruby​​ 类变量的困惑 - 2

    假设一个使用类变量的简单ruby​​程序,classHolder@@var=99defHolder.var=(val)@@var=valenddefvar@@varendend@@var="toplevelvariable"a=Holder.newputsa.var我猜结果应该是99,但输出不是99。我想知道为什么。由于类变量的范围是类,我假设@@var="toplevelvariable"行不会影响类中的变量。 最佳答案 @@var是Holder的类变量。而顶层的@@var不是Holder的同名类变量@@var,是你在创建类Obj

  6. ruby - 关于 CoffeeScript 变量范围的困惑 - 2

    我正在尝试了解CoffeeScript变量的范围。根据文档:ThisbehavioriseffectivelyidenticaltoRuby'sscopeforlocalvariables.但是,我发现它的工作方式不同。在CoffeeScript中a=1changeValue=->a=3changeValue()console.log"a:#{a}"#Thisdisplays3在ruby中a=1deffa=3endputsa#Thisdisplays1有人能解释一下吗? 最佳答案 Ruby的局部变量(以[a-z_]开头)arerea

  7. ruby - Carrierwave + MiniMagick - 如何将动画 GIF 压缩到第一帧? - 2

    有人知道如何使用Carrierwave+MiniMagick将动画GIF压缩到第一帧吗? 最佳答案 我认为MiniMagick有一些变化,因为我只花了三个小时试图找出为什么Andrey的代码对我不起作用。我收到以下错误:ActiveRecord::RecordInvalid(Validationfailed:ImageFailedtomanipulatewithMiniMagick,maybeitisnotanimage?OriginalError:Command("mogrify-scene/var/folders/0o/0oqN

  8. ruby-on-rails - 关于将实例变量传递给 redirect_to 方法的困惑。正如 Rails 指南中所见 - 2

    我正在研究ruby​​onrails指南,即http://guides.rubyonrails.org/layouts_and_rendering.html上的“布局和渲染”主题我对将实例变量传递给redirect_to方法感到困惑。这怎么可能?我认为redirect_to与重定向到另一个网页或url相关。在指南中给出的示例中,它说了以下内容:2.2.2RenderinganAction’sViewIfyouwanttorendertheviewthatcorrespondstoadifferentactionwithinthesametemplate,youcanuserenderw

  9. ruby - 对 "respond_to?"方法感到困惑 - 2

    编辑:我使用的是Ruby2.0.0版我在文件example.rb中有以下代码defsay_helloputs'hi'endputsrespond_to?(:say_hello)say_hello运行此代码时,输​​出为:falsehi我很困惑为什么“respond_to”会返回false?什么时候可以使用那个方法。“respond_to?”方法似乎是这样工作的:classPersondefsay_byeputs'bye'endendmike=Person.newputsmike.respond_to?(:say_bye)mike.say_bye输出是:truebye有人知道为什么要“r

  10. ruby-on-rails - 如何在 Ajax 请求处理期间显示动画图标 - Rails 3 - 2

    我正在尝试为每个ajax请求显示一个加载指示器,我在Rails3应用程序中工作。HTML:"loading-indicator",:style=>"display:none")%>CSS:#loading-indicator{position:absolute;left:10px;top:10px;}loading.js:我放在assest/javascripts/$(document).ready(function(){$(document).ajaxSend(function(event,request,settings){$('#loading-indicator').show(

随机推荐