iOS:UIView视图与组件控件
创建一个仿射矩阵
- CGAffineTransformMake 直接赋值来创建
- CGAffineTransformMakeRotation 设置角度来生成矩阵
- 结果就是
- CGAffineTransformMakeScale 设置缩放,及改变a、d的值
- CGAffineTransformMakeTranslation 设置偏移
改变已经存在的放射矩阵
- CGAffineTransformTranslate 原始的基础上加上偏移
- CGAffineTransformScale加上缩放
- CGAffineTransformRotate加上旋转
- CGAffineTransformInvert 反向的仿射矩阵比如(x,y)通过矩阵t得到了(x',y')那么通过这个函数生成的t'作用与(x',y')就能得到原始的(x,y)
- CGAffineTransformConcat 通过两个已经存在的放射矩阵生成一个新的矩阵t' = t1 * t2
应用仿射矩阵
- CGPointApplyAffineTransform 得到新的点
- CGSizeApplyAffineTransform 得到新的size
- CGRectApplyAffineTransform 得到新的rect
视图view的组件形变控件transform的类型为CGAffineTransform结构体,就是一个矩阵(可以伸缩、平移、旋转等)
struct CGAffineTransform {
CGFloat a, b, c, d;
CGFloat tx, ty;
};
UIButton *btn = [[UIButton alloc] initWithFrame:rect];
–快速初始化
UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
作品:boxMan

#import "ViewController.h"
typedef enum
{
buttonTypeLeft=,
buttonTypeRight,
buttonTypeUp,
buttonTypeDown,
buttonTypeRotateL,
buttonTypeRotateR,
buttonTypeScaleUp,
buttonTypeScaleDown, }buttonType;
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIView *viewMan; @end @implementation ViewController
//移动方向
- (IBAction)buttonDirectionClicked:(UIButton *)sender
{
//父视图的长度和高度
NSInteger screenWidth = self.view.frame.size.width;
NSInteger screenHeight = self.view.frame.size.height; //子视图
CGRect rect = self.viewMan.frame;
//每次移动距离
NSInteger offset = ;
//父控件通过tag标识获取视图中子控件(组件)
switch (sender.tag)
{
case buttonTypeDown:
rect.origin.y += offset;
if(rect.origin.y >= screenHeight)
{
rect.origin.y = -rect.size.height;
}
break;
case buttonTypeUp:
rect.origin.y -= offset;
if(rect.origin.y <= -rect.size.height)
{
rect.origin.y = screenHeight;
}
break;
case buttonTypeLeft:
rect.origin.x -= offset;
if(rect.origin.x <= -rect.size.width)
{
rect.origin.x = screenWidth;
}
break;
case buttonTypeRight:
rect.origin.x += offset;
if(rect.origin.x >= screenWidth)
{
rect.origin.x = -rect.size.width;
}
break;
}
self.viewMan.frame = rect;
} //旋转
- (IBAction)buttonRotateClicked:(UIButton *)sender
{
//子视图这个控件的坐标矩阵
CGAffineTransform form = self.viewMan.transform;
switch (sender.tag) {
case buttonTypeRotateL:
form = CGAffineTransformRotate(form, -M_2_PI/);
break;
case buttonTypeRotateR:
form = CGAffineTransformRotate(form, M_2_PI/);
break;
}
self.viewMan.transform = form;
} //放缩
- (IBAction)buttonScaleClicked:(UIButton *)sender
{
//子视图这个控件的坐标矩阵
CGAffineTransform form = self.viewMan.transform;
CGFloat scaleFator = 0.0f; switch (sender.tag) {
case buttonTypeScaleUp:
scaleFator = 1.2;
break;
case buttonTypeScaleDown:
scaleFator = 0.8;
break;
}
form = CGAffineTransformScale(form, scaleFator, scaleFator);
self.viewMan.transform = form;
} - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end
iOS:UIView视图与组件控件的更多相关文章
- IOS 设置视图半透明子控件不透明
代码处理: UIColor *color = [[UIColor blackColor] colorWithAlphaComponent:0.6]; self.view.backgroundColor ...
- iOS开发UI篇—UIScrollView控件介绍
iOS开发UI篇—UIScrollView控件介绍 一.知识点简单介绍 1.UIScrollView控件是什么? (1)移动设备的屏幕⼤大⼩小是极其有限的,因此直接展⽰示在⽤用户眼前的内容也相当有限 ...
- iOS开发UI篇—UITableview控件基本使用
iOS开发UI篇—UITableview控件基本使用 一.一个简单的英雄展示程序 NJHero.h文件代码(字典转模型) #import <Foundation/Foundation.h> ...
- ios开发中关闭textview控件的虚拟键盘
在ios开发中,textfield控件在点击的时候出现虚拟键盘,关掉虚拟键盘可以通过虚拟键盘中的done button和点击view中的任意地方来关闭虚拟键盘. 1.第一种方法是textfield控件 ...
- iOS开发UI篇—UIScrollView控件实现图片缩放功能
iOS开发UI篇—UIScrollView控件实现图片缩放功能 一.缩放 1.简单说明: 有些时候,我们可能要对某些内容进行手势缩放,如下图所示 UIScrollView不仅能滚动显示大量内容,还能对 ...
- iOS开发UI篇—UITableview控件简单介绍
iOS开发UI篇—UITableview控件简单介绍 一.基本介绍 在众多移动应⽤用中,能看到各式各样的表格数据 . 在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView,UIT ...
- Android各组件/控件间通信利器之EventBus
实际项目开发过程中,经常遇到如下场景:不同的应用程序组件的控件间具有一定的相互关联性,其中用户对后者进行的某种操作会引起前者的相应改变.举一个具体的场景:以糗事百科为例,在糗事列表页和详情页页,对于每 ...
- iOS开发UI篇—UITableview控件使用小结
iOS开发UI篇—UITableview控件使用小结 一.UITableview的使用步骤 UITableview的使用就只有简单的三个步骤: 1.告诉一共有多少组数据 方法:- (NSInteger ...
- iOS开发UI篇—UIScrollView控件实现图片轮播
iOS开发UI篇—UIScrollView控件实现图片轮播 一.实现效果 实现图片的自动轮播 二.实现代码 storyboard中布局 代码: #import "YYV ...
随机推荐
- span 超出内容自动换行
<span style="width:80%;word-break:normal;display:block;word-warp:break-word;overflow:hidden; ...
- dubbo-demo的运行
在学习dubbo时,最主要的是将dubbo运行起来. 现在先搭建起来简单的demo. 一:安装zookeeper(在wondows下安装,且是单机模式) 1.下载zookeeper 2.下载的版本 3 ...
- 喜大普奔!Django官方文档终于出中文版了
喜大普奔!Django官方文档终于出中文版了 文章来源:企鹅号 - Crossin的编程教室 昨天经 Sur 同学告知才发现,Django 官方文档居然支持中文了! 之所以让我觉得惊喜与意外,是因为: ...
- MIT-6.828-JOS-lab1:C, Assembly, Tools, and Bootstrapping
Lab1:Booting a PC 概述 本文主要介绍lab1,从内容上分为三部分,part1简单介绍了汇编语言,物理内存地址空间,BIOS.part2介绍了BIOS从磁盘0号扇区读取boot loa ...
- 监控cpu、内存 <shell>
获取cpu.内存结果 pid=$1 #获取进程pid echo $pid interval=1 #设置采集间隔 while true do echo $(date +"%y-%m-%d %H ...
- Highmaps网页图表教程之数据标签与标签文本
Highmaps网页图表教程之数据标签与标签文本 Highmaps数据标签 数据标签用于在地图图表上展现节点对应的数据.数据标签展现数据是静态的,只要节点一加载,数据标签就会出现在节点附近.在High ...
- 错误:SSL peer shut down incorrectly
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 打开这个界面 ,修改一下.对照自己以前的没问题的项目.我的是3.3. 错误:Failed ...
- 【BZOJ】4565: [Haoi2016]字符合并
4565: [Haoi2016]字符合并 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 690 Solved: 316[Submit][Status ...
- bzoj 4627: [BeiJing2016]回转寿司 -- 权值线段树
4627: [BeiJing2016]回转寿司 Time Limit: 10 Sec Memory Limit: 256 MB Description 酷爱日料的小Z经常光顾学校东门外的回转寿司店. ...
- 模板 快速询问GCD
快速询问两个数的GCD 我觉得只有智障会卡这个玩意儿-- const int maxn = 1e6; const int Sqrt_N = 1e3; int pre[maxn + 1] , decom ...