iOS视图弹出、平移、旋转、翻转、剪切等变换效果实现
效果图:

1、定义属性
@property (nonatomic, strong) UIView *transformView;//发生变换的试图 @property (nonatomic, strong) UIView *backGroundView;//发生变换试图的父试图 @property (nonatomic, strong) UITableView *titleTableView; @property (nonatomic, strong) NSArray *dataSourceAry;//数据源数组
2、实现代码
-(void)poppingViewWithTransform:(NSString *)transformStr{
[self.view addSubview:self.backGroundView];
self.transformView.frame = CGRectMake(SCWidth/2-100, 200, 200, 200);
if ([transformStr isEqualToString:@"缩放变换"]) {
//很简单的变换效果,200,为Y轴从下往上平移,相反-200 是从上往下平移
self.transformView.transform = CGAffineTransformMakeScale(0.0, 0.0);
[UIView animateWithDuration:0.5 animations:^{
self.transformView.transform = CGAffineTransformMakeScale(1.0, 1.0);
}];
}else if([transformStr isEqualToString:@"平移变换"]){
//很简单的变换效果,200,为Y轴从下往上平移,相反-200 是从上往下平移,X轴变换同理
self.transformView.transform = CGAffineTransformMakeTranslation(0, -200);
[UIView animateWithDuration:0.5 animations:^{
self.transformView.transform = CGAffineTransformMakeTranslation(0,0);
}];
}else if([transformStr isEqualToString:@"翻转变换"]){
//下面注释的代码,最后Z轴改成一个数字,例12,可以实现旋转变换
//self.transformView.layer.transform = CATransform3DMakeRotation(12, 1, 1, 0);
self.transformView.layer.transform = [self firstStep];
[UIView animateWithDuration:0.5 animations:^{
self.transformView.layer.transform = CATransform3DMakeRotation(0, 1, 0, 0);
}];
}else if([transformStr isEqualToString:@"旋转变换"]){
//具体效果可以更改 M_PI_4 角度来实现
self.transformView.transform = CGAffineTransformMake(( cos(M_PI_4) ), ( sin(M_PI_4) ), -( sin(M_PI_4) ), (cos(M_PI_4) ), 0, 0);
[UIView animateWithDuration:0.5 animations:^{
self.transformView.transform = CGAffineTransformMake(( cos(M_PI) ), ( sin(M_PI) ), -( sin(M_PI) ), (cos(M_PI) ), 0, 0);
}];
}else if([transformStr isEqualToString:@"剪切变换"]){
//使用仿射基础方法CGAffineTransformMake,设置x和y都为0.5的斜切
//可以试着把第一个1换成0.5,看看效果
//可以试着把第二个1换成0.5,看看效果
self.transformView.transform = CGAffineTransformMake(1,0.5,0.5,1,0,0);
[UIView animateWithDuration:0.5 animations:^{
self.transformView.transform = CGAffineTransformMake(1,0,0,1,0,0);
}];
}
self.transformView.layer.cornerRadius = 7;
self.transformView.layer.masksToBounds = YES;
[self.backGroundView addSubview:self.transformView];
」
其中,翻转变化用到这个:
-(CATransform3D)firstStep{
//让transform1为单位矩阵
CATransform3D transform1 = CATransform3DIdentity;
//z轴纵深的3D效果和CATransform3DRotate配合使用才能看出效果
//m34很重要
transform1.m34 = 1.0/-100;
//x和y都缩小为原来的0.9,z不变
transform1 = CATransform3DScale(transform1, 0.9, 0.9, 1);
//绕x轴向内旋转15度
transform1 = CATransform3DRotate(transform1,15.0f * M_PI/180.0f, 1, 0, 0);
return transform1;
}
iOS视图弹出、平移、旋转、翻转、剪切等变换效果实现的更多相关文章
- iOS:弹出窗控制器:UIPopoverController
弹出窗控制器:UIPopoverController 截图: 实质:就是将内容控制器包装成popoverController的形式,然后在模态出来,必须给定指向目标(target.frame). ...
- h5页面ios键盘弹出收起后页面底部留白问题
<input placeholder="验证码" type="tel" v-model="verify" maxlength=&quo ...
- iOS模态弹出半透明视图控制器
项目中需要实现点击按钮出现的视图全屏覆盖,呈半透明状态可以看到下面的视图? 解决方案: 绕了很多弯路原来可以使用模态弹出一个视图控制器 在iOS8之后只需要设置一个最新的属性 SecondViewCo ...
- iOS:键盘弹出和收起的通知使用
介绍:不论是UITextField,还是UITextView,使用它们输入文字时都是有键盘的弹出,此时可能会挡住我们创建的一分部其他视图,此时,就需要根据键盘的高度将我们被隐藏的部分View做向上或者 ...
- iOS 键盘弹出遮挡输入框
#pragma mark 键盘弹出遮挡输入框 //开始编辑输入框的时候,软键盘出现,执行此事件 -(void)textFieldDidBeginEditing:(UITextField *)textF ...
- Modal视图弹出方式
Modal方式弹出页面: 1.Modal方式弹出页面在iOS中有很广泛的应用,比如UIImagePickerController等,Modal方式主要有以下几个作用: 检查登陆信息,Modal出登陆页 ...
- 基于layer封装的异步加载分部视图弹出层
背景:之前一直用的artdialog,但是样式不是很好看,后来偶然看到layer,觉得不错,但是对于.net mvc来说,不能像artdialog一样弹出分部视图是很难受的.所以下面的方法就解决了. ...
- ios手机弹出层上表单的操作,收起键盘焦点错乱的问题
今天遇到了ios手机下 弹出层上form表单 当收起键盘后,焦点错乱,无法再操作的问题 解决办法 function device() { const u = navigator.userAgent; ...
- 弹出视图/弹出模态presentViewController与presentModalViewController
一.主要用途 弹出模态ViewController是IOS变成中很有用的一个技术,UIKit提供的一些专门用于模态显示的ViewController,如UIImagePickerController等 ...
随机推荐
- RichTextBox实现鼠标右键(剪切,复制,粘贴)功能
private static void InitRichTextBoxContextMenu(RichTextBox textBox) { //创建剪切子菜单 var cutMenuItem = ne ...
- 使用webstom或者idea上传代码到github或coding
鉴于github网络速度太慢,建议用coding.先介绍github上传方式,因为webstom或idea集成了github,方法简单. git是一个版本控制器,他的作用是管理代码.比如你修改了代码, ...
- 关于从JSP页面插入数据到数据库中乱码问题的解决
问题描述:最近我在写一个j2ee的留言板系统模块,遇到了一个非常让我头大的问题,当我从JSP页面输入数据后,通过hibernate中的业务逻辑类HQL语句把这个数据插入到本地的mysql数据库中,可是 ...
- String源码中的"avoid getfield opcode"
引言: 之前一篇文章梳理了String的不变性原则,还提到了一段源码中注释"avoid getfield opcode",当时通过查阅资料发现,这是为了防止 getfield(获取 ...
- 在Mac上使用Visual Studio Code开发/调试.NET Core代码
.Net Core 1.0终于发布了,Core的一大卖点就是跨平台.这个跨平台不只是跨平台运行,而且可以跨平台开发.今天抽空研究了下在Mac下如何使用VS Code来开发.NET Core程序,并且调 ...
- 自己封装的一个JS分享组件
因为工作的需求之前也封装过一个JS分享插件,集成了我们公司常用的几个分享平台. 但是总感觉之前的结构上很不理想,样式,行为揉成一起,心里想的做的完美,实际上总是很多的偏差,所以这次我对其进行了改版. ...
- WPF CheckBox 自定义样式
WPF 自定义样式.CheckBox <Style x:Key="EmptyCheckBox" TargetType="CheckBox"> < ...
- 解决BUG:CS1617: 选项“6”对 /langversion 无效;必须是 ISO-1、ISO-2、3、4、5 或 Default
vs 2015的项目用vs2013,更改.net版本之后,打开会报以下错误,原因是配置文件修改出了问题.已经验证是BUG 你只需要把Web.config换成以前的就好了. https://conn ...
- 简单回顾NPOI导入导出excel文件
当前环境.net4.0 去官方下下载: NOPI官网 关于NOPI的详细,这里就不再介绍. 在项目中,我们只需引入 NPOI.dll 就可以了. 接下来..................... ...
- KMP算法-Java实现
目的: 为了解决字符串模式匹配 历程: 朴素模式匹配:逐次进行比较 KMP算法:利用匹配失败得到的信息,来最大限度的移动模式串,以此来减少比较次数提高性能 概念: m:是目标串长度 n:是模式串长度 ...