让这个框动画旋转

首页 > 打怪经验 来源: 0 0
iOS的UI是基于UIView类的,咱们能看到的每一一个UI元素都是UIView或者UIView的子类。View按树形构造组织起来,树根是UIWindow。iOS的UI是基于UIView类的,咱们能看到的每一一个UI元素都是UIView...

  iOS的UI是基于UIView类的,咱们能看到的每一一个UI元素都是UIView或者UIView的子类。View按树形构造组织起来,树根是UIWindow。

  iOS的UI是基于UIView类的,咱们能看到的每一一个UI元素都是UIView或者UIView的子类。View按树形构造组织起来,树根是UIWindow。

  View担任界面的交互战显隐,此中显隐部门由CALayer来实现。每一一个UIView包括一个CALayer真例。能够这么认为,UIView自己是不成见的,咱们能看到的都是CALayer,UIView只是担任对于CALayer停止办理。

  UIView的显隐设置都是对于CALayer属性的封装,可是这层封装了CALayer供给的3D显隐功用。以是咱们想让UIView显隐3D的结果的话,需求间接操作CALayer。

  经由过程设置CALayer的transform属性,可使CALayer发生3D空间内的平移、1.85复古传奇私服发布网站胀放、扭转等转变。

  CALayer默许利用正交投影,是以没有远小近大结果,并且没有明白的API能够利用透视投影矩阵。所幸能够经由过程矩阵连乘本人构造透视投影矩阵。构造透视投影矩阵的代码以下:

  这个函数的完成道理要参考计较机图形学的3D变换部门,当前再作注释。隐正在只要求领会接口的寄义,center指的是相机 的,相机的是相对于要停止变换的CALayer的来讲的,原点是CALayer的anchorPoint正在全部CALayer的,比方CALayer的巨细是(100, 200), anchorPoint值为(0.5, 0.5),此时anchorPoint正在全部CALayer中的就是(50, 100),正核心的。传入透视变换的相机为(0, 0),那末相机所正在的相对于CALayer就是(50, 100)。若是但愿相机正在右上角,则需求传入(-50, -100)。disZ暗示的是相机离z=0立体(也能够理解为屏幕)的间隔。带透视结果的扭转,结果以下:

  CATransform3D rotate = CATransform3DMakeRotation(M_PI/6, 1, 0, 0);

  CATransform3D rotate = CATransform3DMakeRotation(M_PI/6, 0, 0, 1);

  image的默许anchorPoint为(0.5,0.5),也就是正在图片核心;眼睛正在图片核心点,距屏幕200单元。能够察看到,由于翻转,使图片的分歧部门手屏幕间隔分歧,近大远小的结果使平面感大大提拔。饶Z轴的扭转不禁于透视发生转变,由于一切的点离屏幕间隔不异,以是不会发生近大远小的透视感。

  CALayer的扭转战胀放是绕anchorPoint点的,改动anchorPoint的值,可使Layer绕分歧的点而不仅是核心点扭转胀放。正在构造透视投影矩阵的例子中就可以够看到,CATransform3D能够利用CATransform3DConcat函数毗连起来以构造更庞杂的变换。网通复古传奇私服,经由过程这些方式,能够组合出更多的结果来。上面是个翻转的动画。利用UITimer

  最初是两个更庞杂的例子。第一个是利用四张一样巨细的图片围成一个框,让这个框动画扭转。

  CATransform3D move = CATransform3DMakeTranslation(0, 0, 160);

  的例子都利用UIImage的CALayer,但CALayer发生的动画能够利用正在一切的UIView及子类上,上面是个通俗界面的平面翻转结果。

  view1.layer.transform = CATransform3DPerspect(mat1, CGPointZero, 500);


声明:本文章来源于网络,如果存在出处、来源错误,或内容侵权、失实问题,请及时与我们联系。本文仅代表原媒体及作者观点,不代表www.hwlxx.com立场!