layer和3D仿射变换

1、视图的显示基于图层,通过控制图层同样能控制显示效果,获取当前的视图的layer,并为其增加圆角边框。

  //设置layer边框的宽度为2view.layer.borderWidth=2;//如果需要为layer添加颜色需要转换为CGColor对象view.layer.borderColor=[UIColor greenColor].CGColor;//将边框的圆角半径设置为10view.layer.cornerRadius=10;

2、通过layer设置视图的阴影

    // 1 设置当前的阴影颜色view.layer.shadowColor=[UIColor blackColor].CGColor;// 2 设置当前凸出来的阴影,通过该方法来控制当前阴影凸出来的程度,从而达到所需要的效果view.layer.shadowOffset=CGSizeMake(5, 5);// 3 设置当前的透明度
view.layer.shadowOpacity=0.5;

3、自定义layer

    CALayer *layer=[CALayer layer];layer.borderColor=[UIColor redColor].CGColor;layer.borderWidth=2;layer.cornerRadius=10;layer.backgroundColor=[UIColor redColor].CGColor;
layer.bounds=CGRectMake(0, 0, 200, 100);//设置position控制当前位置
layer.position=CGPointMake(100, 100);
//设置锚点用来控制position的位置,锚点的大小范围为0-1,可以理解为按照比例来定位图层的位置点,将该点定位到position属性所指的位置上去,这样通过两个属性便能很好的控制当前图层的位置
layer.anchorPoint=CGPointMake(0, 0);
//将当前的图层增加到当前显示的图层[self.view.layer addSublayer:layer];

4、layer 3D仿射变换

  1、平移

  1.1、3D平移分为X Y Z 三维,分别设置数值会沿着设置的方向平移 

t1:X轴偏移位置,往下为正数。

t2:Y轴偏移位置,往右为正数。

t3:Z轴偏移位置,往外为正数。

NSValue * nav=[NSValue valueWithCATransform3D: CATransform3DMakeTranslation(t1, t2, t3)];
[view.layer setValue:nav forKey:@"transform"];

  1.2、通过KVC赋值,如下表格所示

 

//沿着x方向平移100
[view.layersetValue:@(100) forKeyPath:@"transform.translation.x"];//沿着y方向平移100
[view.layersetValue:@(100) forKeyPath:@"transform.translation.y"];//沿着z方向平移100
[view.layersetValue:@(100) forKeyPath:@"transform.translation.z"];

  2、旋转

  2.1、旋转有四个参数,第一个为旋转的角度,为弧度表示,后面三个值分别对应三个轴,可以设置围绕不同轴旋转

x:沿着X轴方向旋转,值范围-1 和1之间

y:沿着Y轴方向旋转,值范围-1和1之间

z:沿着Z轴方向旋转,值范围-1和1之间

    [UIView animateWithDuration:1 animations:^{view.layer.transform=CATransform3DMakeRotation(M_PI, 0, 0, -1);}];

  2.2、通过KVC赋值

//沿着z轴旋转
[view.layer setValue:@(M_PI_2) forKeyPath:@"transform.rotation.z"];//沿着x轴旋转
[view.layer setValue:@(M_PI_2) forKeyPath:@"transform.rotation.x"];

  3、缩放

  3.1、三个参数分别为沿着每个轴缩放的倍数,顺序依次为 X Y Z三维。

view.layer.transform=CATransform3DMakeScale(1, 1.5, 1);

  3.2、通过KVC赋值

//沿着x轴方向放大1.5倍数
[view.layer setValue:@(1.5)forKeyPath:@"transform.scale.x"];//沿着y轴方向放大1.5倍数
[view.layer setValue:@(1.5)forKeyPath:@"transform.scale.y"];//沿着z轴方向放大1.5倍数
[view.layer setValue:@(1.5)forKeyPath:@"transform.scale.z"];

 

作者:杰瑞教育
出处:http://www.cnblogs.com/jerehedu/ 
本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React Native之Android原生通过DeviceEventEmitter发送消息给js

1 问题 Android原生向js发消息,并且可以携带数据 2 实现原理 Android原生可以使用RCTEventEmitter来注册事件,然后这里需要指定事件的名字,然后在js那端进行监听同样事件的名字监听,就可以收到消息得到数据 Android注册关键代码 reactContext.getJSModule(DeviceEventManag…

CentOS安装JAVA JDK

普通情况下,我们都要将linux自带的OPENJDK卸载掉。然后安装SUN的JDK。首先查看Linux自带的JDK是否已安装。 输入例如以下命令,查看已经安装的JAVA版本号信息。 Linux代码 java -version 输入例如以下命令。查看JDK的信息。Linux代码 rpm -qa|grep j…

安装bigdesk后es无法启动_安装天正后,探索者无法双击启动?

用户经常会出现,安装天正后,探索者无法双击启动,或者是图纸无法拖拽入CAD中,如何解决?答:天正安装完成后,默认将CAD的acad.exe程序,添加了“以管理员身份运行此程序”而导致的&#…

服务器安全维护包含,服务器安全维护包含

服务器安全维护包含 内容精选换一换本章节介绍如何使用管理控制台向导创建裸金属服务器。创建裸金属服务器时,您需要配置规格、镜像、存储、网络、安全组等必备信息。同时,向导也提供了丰富的扩展配置功能,方便您进行个性化部署和管理。在创建…

C# 发出异步的Get请求

下列的下载代码示例是 HttpClientSample。它以不同的方式异步调用Web 服务。为了演示本例使用的不同方法,使用了命令行参数。示例代码使用了以下名称空间:System System.Linq System.Net System.Net.Http System.Net.Http.Headers System.Threading Sy…

React Native之Props(属性)和State(状态)和简单样式简单使用

1 Props(属性)和State(状态)和简单样式简单使用App.js代码如下 /*** Sample React Native App* https://github.com/facebook/react-native** format* flow*/import React, {Component} from react; import {Platform, StyleSheet, Text, View, NativeModules, DeviceEvent…

config kubectl_Kubernetes(k8s)中文文档 kubectl config set-context_Kubernetes中文社区

译者:hurf在kubeconfig配置文件中设置一个环境项。摘要在kubeconfig配置文件中设置一个环境项。 如果指定了一个已存在的名字,将合并新字段并覆盖旧字段。kubectl config set-context NAME [--clustercluster_nickname] [--useruser_nickname] [--namesp…

使用基于Roslyn的编译时AOP框架来解决.NET项目的代码复用问题

理想的代码优化方式团队日常协作中,自然而然的会出现很多重复代码,根据这些代码的种类,之前可能会以以下方式处理方式描述应用时可能产生的问题硬编码多数新手,或逐渐腐坏的项目会这么干,会直接复制之前实现的代码带来…

React Native之Flexbox布局和监测文本输入onChangeText

1 Flexbox布局 1) flexDirection 可以决定布局的主轴,子元素是应该沿着水平轴(row)方向排列,还是沿着竖直轴(column)方向排列 2) justifyContent 决定其子元素沿着次轴(与主轴垂直的轴,比如若主轴方向为row,则次轴方向为…

半年总结——欲戴王冠,必承其重

【Introduction】 每一个女生都梦想着作为一个女王。但是你仅仅看到了女王头上金闪闪的王冠,却不知道在这个王冠下。她是怎样成长的!假设你想要做到有女王一样的权利,就必需要承担一个女王应该做到的事情!——欲带王冠&#xff0c…

一维数组和二维数组的区别_数组指针和指针数组的区别

数组指针和指针数组的区别 - hongcha_717 - 博客园​www.cnblogs.com数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的…

mysql 配置多个数据库连接_总结MySQL修改最大连接数的两个方式

问题在使用MySQL数据库的时候,经常会遇到这么一个问题,就是“Can not connect to MySQL server. Too many connections”-mysql 1040错误,这是因为访问MySQL且还未释放的连接数目已经达到MySQL的上限。通常,mysql的最大连接数默认…

饿了么超级会员,年卡低至108元!饿了么会员,点外卖超省钱!

饿了么是大家常用的外卖平台,经常点外卖的朋友,充个饿了么超级吃货卡,还是能省不少钱的,今天给大家带来饿了么会员特价充值,会员秒到!饿了么超级会员特价充值月卡:原价15元,特价仅需…

React Native之内部方法常用几种写法和调用规则

1 简单部分代码 export default class App extends Component<Props> {render() {return (<View style{styles.container}><View style{styles.welcome}><Button onPress{this.showMsg}titleprees me showMsg/> <Button onPress{() > {this.sho…

介绍一款受欢迎的.NET 开源UI库

概述今天要带大家了解的是一款WPF的开源控件库MahApps.Metro。MahApps.Metro是用于创建现代WPF应用程序的工具包&#xff0c;它许多开箱即用的好东西。目前支持的NET Framework 4.6.2及更高版本、.NET Core 3.1, .NET 5 and .NET 6 (on Windows)。官网学习文档地址&#xff1a;…

图像分类中混淆矩阵精度验证法中的几个指标说明

ToolBox->Classification->PostClassification->Confusion Matrix->Using Ground Truth ROIs,可以得到如下的分类精度验证的混淆矩阵。 要看懂这个精度验证结果,需要了解几个混淆矩阵中的几项评价指标:

React Native之触摸事件(Touchable系列和onLongPress)

1 触摸事件 普通点击我们可以使用onPress方法,我们可以使用Touchable 系列控件设计我们的按钮 TouchableHighlight 背景会在用户手指按下时变暗 TouchableNativeFeedback用户手指按下时形成类似墨水涟漪的视觉效果 TouchableOpacity指按下时降低按钮的透明度&#xff0c;而…

社交背水一战?校园日记背后,支付宝野心你真能懂?

“校园日记”昨天火了一天&#xff0c;我们也是时候来聊聊支付宝背后的具体战略和意图了。今天早上看到虎嗅的头条《支付宝的“圈子”&#xff0c;阿里做社交的背水一战》&#xff0c;文章观点主要分析了支付宝做社交的必要性&#xff0c;以及这次切入社交领域的巧妙性。 这篇文…

北大青鸟s2结业考试机试_重庆北大青鸟「学员心声」任何一次的考试,都是一次珍贵的蜕变...

相信不少同学&#xff0c;在每次考完试后都会有一段 “舒适期‘’。虽然这时候有讲评、有成绩、有排名&#xff0c;但就是感觉学习压力少了许多。然而重庆北大青鸟校区鼓励学员考完要分析、总结考试结果&#xff0c;这样才能更好的找出在学习中遇到的问题并加以解决。以下分享的…

React Native之(var和let区别 )(简单解构)(map对象遍历)(可变顺序参数和不可以变顺序参数函数)

1 var和let区别 let左右范围在块里面,var定义的变量可提升,用let声明的变量不可以声明2次 2 简单解构 let [a, b, c] [1, 2, 3];3 map对象遍历 const map new Map();map.set(first, hello);map.set(second, world);for (let [key, value] of map) {console.log(key "…