首页
学习
活动
专区
圈层
工具
发布

iOS动画-CALayer布局属性详解

UIView属性 CALayer属性 属性说明 frame frame 表示相对于其父视图的坐标位置 bounds bounds 表示相对于其自身的坐标位置,{0,0}通常是其左上角 center position...相对于父图层锚点AnchorPoint所在位置 ?...我们也可以更确切理解为:position是相对于superLayer来讲,而anchorPoint是相对于当前layer来讲;只不过在默认情况下,anchorPoint与position是重合的;锚点是用单位坐标来描述的...锚点动画.gif 三、视图与图层的坐标系 CALayer给不同坐标系之间的图层转换提供了一些工具类方法: - (CGPoint)convertPoint:(CGPoint)p fromLayer:(nullable...)坐标系下的点或者矩形转换为另一个图层(或视图)坐标系下的点或者矩形;开发过程中我们通常操作的对象都是视图,所以下面以视图为例简单演示其用法:首先创建添加两个宽高都是100*100的橙色、紫色视图在控制器的

2.6K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    图层几何学 -- iOS Core Animation 系列二

    frame代表了图层的外部坐标(也就是在父图层上占据的空间),bounds是内部坐标({0, 0}通常是图层的左上角),center和position都代表了相对于父图层anchorPoint所在的位置...视图的frame、bounds、center属性仅仅是存取方法,当操纵视图的frame时,实际上是在改变视图对应的CALayer的frame, 不能独立于图层之外改变视图的frame....CALayer也给我们提供了一些获取一个图层的绝对位置的方法,或者相对于另一图层的位置(而不是它当前父图层的位置): - (CGPoint)convertPoint:(CGPoint)point fromLayer...:(CALayer *)layer; - (CGPoint)convertPoint:(CGPoint)point toLayer:(CALayer *)layer; - (CGRect)convertRect...3.2 zPosition演示代码 我们演示下改变zPosition会怎么改变视图的显示顺序。 首先我在SB中设置两个视图,如下图: ?

    90830

    iOS动画-CALayer基础知识

    UIView属性 CALayer属性 属性说明 frame frame 表示相对于其父视图的坐标位置 bounds bounds 表示相对于其自身的坐标位置,{0,0}通常是其左上角 center position...我们也可以更确切理解为:position是相对于superLayer来讲,而anchorPoint是相对于当前layer来讲;只不过在默认情况下,anchorPoint与position是重合的;锚点是用单位坐标来描述的...锚点动画.gif 视图与图层的坐标系 CALayer给不同坐标系之间的图层转换提供了一些工具类方法: - (CGPoint)convertPoint:(CGPoint)p fromLayer:(nullable...)convertPoint:(CGPoint)point toView:(nullable UIView *)view; - (CGPoint)convertPoint:(CGPoint)point fromView...)坐标系下的点或者矩形转换为另一个图层(或视图)坐标系下的点或者矩形;开发过程中我们通常操作的对象都是视图,所以下面以视图为例简单演示其用法:首先创建添加两个宽高都是100*100的橙色、紫色视图在控制器的

    2.4K50

    SwiftUI 动画进阶 — Part 5:Canvas

    我不得不把这篇文章推迟几周,因为 Canvas 视图有点不稳定。我们仍然处于测试阶段,所以这是可以预期的。然而,该视图产生的崩溃使这里的一些例子无法分享。...Canvas 视图有一种引用 SwiftUI 视图的方式,将其解析为一个符号,然后绘制它。 要解决的视图是在ViewBuilder闭包中传递的,如下面的例子所示。...: CGPoint, rhs: CGPoint) -> CGPoint { return CGPoint(x: lhs.x - rhs.x, y: lhs.y - rhs.y)...每一列都被实现为一个单独的SwiftUI视图。叠加字符和用渐变绘图是由视图处理的。当我们在画布上使用渐变时,起始/结束点或任何其他几何参数都是相对于整个画布的。...对于柱状渐变,在视图中实现它比较容易,因为它将相对于视图的原点。 每一列都有许多参数:位置(x、y、z)、字符、从顶部删除多少个字符,等等。这些值在每次TimelineView更新后都会被变更。

    3.4K10

    UIDynamic 物理引擎概念介绍UIDynamicAnimator(动画者)动力行为(UIDynamicBehavior)一、抽象类 UIDynamicBehavior二、UIGravityBeh

    bounds为边界,并且设置视图的内边距 - (void)setTranslatesReferenceBoundsIntoBoundaryWithInsets:(UIEdgeInsets)insets;...:(id )item2; (3)创建一个吸附行为,让一个动力项的某一点和指定的锚点进行吸附,UIAttachmentBehaviorTypeAnchor类型,offset相对于动力项...)point; (4)创建一个吸附行为,让一个动力项的某一点和另一个动力项的某一点进行吸附,UIAttachmentBehaviorTypeItems类型,offset相对于动力项center的偏移 -...:(UIOffset)offset1 attachedToItem:(id )item2 offsetFromCenter:(UIOffset)offset2; 把以子视图为基准的坐标转换为以父视图为基准的视图坐标方法...子视图为基准的坐标转换为以父视图为基准的视图坐标方法 ---- UIPushBehavior(推行为) 注意要进行懒加载,多次添加会导致无效 1.获取该行为作用的动力项 @property

    3.6K80

    iOS开发--事件传递,响应者链条及常见面试题

    ;i--){ // 3.1获取一个子控件 UIView *childView = self.subviews[i]; // 3.2当前触摸点的坐标转换为相对于子控件触摸点的坐标...CGPoint childP = [self convertPoint:point toView:childView]; // 3.3判断是否在在子控件中找到了更合适的子控件...-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{ return NO; } 4.涉及的相关面试题 1.事件的传递方向:...事件传递是从上自下传递,响应是从下到上,所谓的上就是父视图而已,也就是离窗口最近的. 2.穿透控件: 2.1 如果我们不想让某个视图响应事件,只需要重载 PointInside:withEvent:方法...在视图层次结构的最顶级视图,如果也不能处理收到的事件或消息,则其将事件传递给window对象进行处理 3\.

    1.1K31

    UIGestureRecognizer  手势识别一、概念介绍二、UIView 的分类三、UIGestureRecognizer 抽象类四、UIGestureRecognizerDelegate 代理

    拖拽手势) UIPinchGestureRecognizer(捏合手势,缩放用) 使用步骤: (1)创建手势识别对象 (2)设置手势识别属性,例如手指数量,方向等 (3)将手势识别附加到指定的视图之上...UIGestureRecognizerStateEnded 手势识别完成,同end 2、手势识别是否可用 @property(nonatomic, getter=isEnabled) BOOL enabled; 3、获取手势触摸的View视图...关键在这一行,如果双击确定偵測失败才會触发单击 [singleRecognizer requireGestureRecognizerToFail:doubleRecognizer]; 5、获取当前触摸在指定视图上的点...- (CGPoint)locationInView:(nullable UIView*)view; 6、获取触摸手指数 - (NSUInteger)numberOfTouches; 7、多指触摸的触摸点相对于指定视图的位置...获取手指拖拽的时候, 平移的值 CGPoint translation = [recognizer translationInView:recognizer.view]; // 2.

    3.8K81

    ASP.NET Core 5.0 MVC中的视图分类及使用——布局视图、启动视图、导入视图、详细视图、分部视图

    创建MVC应用程序   创建后的项目 启动视图 _ViewStart.cshtml 顾名思义,就是在View开始执行之前执行,而且是每一个View, 它的预设内容是 @{ Layout =..."_Layout"; } 我们可以在这个页面,添加一些全局性的内容,比如全局变量等,然后在具体View页面使用这些变量值 导入视图_ViewImports.cshtml, 它的作用是放一些要引用的命名空间...布局视图_Layout.cshtml 它的作用是让所有的视图页保持一致的外观,比如说 统一的 左侧目录、统一的头部导航、头部轮廓图、统一底部官网链接等。它的预设内容是 <!...ViewStart.cshtml页面  _Layout.cshtml页面  _ViewImport.cshtml页面  Index.cshtml页面 在index.cshtml上 F5,运行 分部视图...在Index相同的目录下新建视图页_PartialIndex,并加入一些数据   2.

    2.6K10

    Quartz2D实战-画板工具

    我们发现该方法是在视图即将展示的时候调用的,在这个方法中可以获取到上下文,将试图绘制到View上,其实每一个View内部都有一个layer属性,这个方法中就可以了取得一个layer,所以我们绘制的东西其实是绘制到...locationInView:self]; // 笔尖代码(这段代码可以去掉,主要是加了个笔尖,完善功能,提升用户体验) { //获取偏移量 //获取的偏移量是相对于最原始的点...:1.f]; CGFloat pointW = self.lineWidth + 5; CGPoint pointP = CGPointMake(curP.x...CGAffineTransformTranslate(self.pointView.transform, transP.x, transP.y); //清0操作(不让偏移量进行累加,获取的是相对于上一次的值...重点看[path stroke]方法,其实这个方法内部已经帮我们实现了绘制视图的几个步骤: 获取上下文 描述路径 把路径添加到上下文 把上下文的内容渲染到View的layer 伪代码如下: 1.

    63240
    领券