iOS:UIView视图与组件控件

简介:
一、UIView常见属性
 (1)@property(nonatomic,readonly)UIView *superview; //获取自己的父控件对象
 (2)@property(nonatomic,readonly,copy)UIView *subviews;//获取自己的所有子控件对象
 (3)@property(nonatomic)NSInteger tag;//控件的ID标识,父控件可以通过tag来找到对应的子控件,默认为0 
 (4)@property(nonatomic) CGRect frame;//控件所在矩形框的位置和尺寸(以父控件的左上角为坐标原点)
 (5)@property(nonatomic) CGRect bounds;//控件所在矩形框的位置和尺寸(以自己左上角为坐标原点,所     以bounds的x\y永远为0)
 (6)@property(nonatomic) CGPoint center;//控件中点的位置(以父控件的左上角为坐标原点)
 (7)@property(nonatomic) CGAffineTransform transform;//控件的形变属性(可以设置旋转角度、比例缩放、平移等属性)
a.旋转:CGAffineTransform CGAffineTransformScale(CGAffineTransform t,  CGFloat sx, CGFloat sy) 
sx和sy为坐标放缩倍数
b.放缩:CGAffineTransform CGAffineTransformRotate(CGAffineTransform t,CGFloat angle) 
angle:旋转度数
c.反转:CGAffineTransform CGAffineTransformInvert(CGAffineTransform t)
 
        d. 两个矩阵仿射为一个新的矩阵:
             CGAffineTransform  CGAffineTransformConcat(CGAffineTransform t1,CGAffineTransform t2)
 
e.判断两个矩阵是否相等:
     bool CGAffineTransformEqualToTransform(CGAffineTransform t1, CGAffineTransform t2)
 

创建一个仿射矩阵

  • 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的组件图框frame的类型为CGRect结构体
struct CGRect
{
CGPoint origin;
CGSize size;
};
struct CGPonit
{
CGFloat x;
CGFloat y;
};
struct CGSize
{
CGFloat width;
CGFloat height;
};
 

视图view的组件形变控件transform的类型为CGAffineTransform结构体,就是一个矩阵(可以伸缩、平移、旋转等)

struct CGAffineTransform {

  CGFloat a, b, c, d;

  CGFloat tx, ty;

};

二、UIButton的初始化
 
–最普通的初始化方法

UIButton *btn = [[UIButton alloc] initWithFrame:rect];

 –快速初始化

UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];

–type参数用来指定按钮的类型,一共有6种选择:
•UIButtonTypeCustom:无类型,按钮的内容需要自定义
•UIButtonTypeRoundedRect:圆矩形边框  
•UIButtonTypeDetailDisclosure: 
•UIButtonTypeInfoLight: 
•UIButtonTypeInfoDark: 
•UIButtonTypeContactAdd:

    作品:boxMan

复制代码
  1 #import "ViewController.h"
  2 typedef enum
  3 {
  4     buttonTypeLeft=1,
  5     buttonTypeRight,
  6     buttonTypeUp,
  7     buttonTypeDown,
  8     buttonTypeRotateL,
  9     buttonTypeRotateR,
 10     buttonTypeScaleUp,
 11     buttonTypeScaleDown,
 12     
 13 }buttonType;
 14 @interface ViewController ()
 15 @property (weak, nonatomic) IBOutlet UIView *viewMan;
 16 
 17 @end
 18 
 19 @implementation ViewController
 20 //移动方向
 21 - (IBAction)buttonDirectionClicked:(UIButton *)sender
 22 {
 23     //父视图的长度和高度
 24     NSInteger screenWidth = self.view.frame.size.width;
 25     NSInteger screenHeight = self.view.frame.size.height;
 26     
 27     //子视图
 28     CGRect rect = self.viewMan.frame;
 29     //每次移动距离
 30     NSInteger offset = 5;
 31     //父控件通过tag标识获取视图中子控件(组件)
 32     switch (sender.tag)
 33     {
 34         case buttonTypeDown:
 35             rect.origin.y += offset;
 36             if(rect.origin.y >= screenHeight)
 37             {
 38                 rect.origin.y = -rect.size.height;
 39             }
 40             break;
 41         case buttonTypeUp:
 42             rect.origin.y -= offset;
 43             if(rect.origin.y <= -rect.size.height)
 44             {
 45                 rect.origin.y = screenHeight;
 46             }
 47             break;
 48         case buttonTypeLeft:
 49             rect.origin.x -= offset;
 50             if(rect.origin.x <= -rect.size.width)
 51             {
 52                 rect.origin.x = screenWidth;
 53             }
 54             break;
 55         case buttonTypeRight:
 56             rect.origin.x += offset;
 57             if(rect.origin.x >= screenWidth)
 58             {
 59                 rect.origin.x = -rect.size.width;
 60             }
 61             break;
 62     }
 63     self.viewMan.frame = rect;
 64 }
 65 
 66 //旋转
 67 - (IBAction)buttonRotateClicked:(UIButton *)sender
 68 {
 69     //子视图这个控件的坐标矩阵
 70     CGAffineTransform form =  self.viewMan.transform;
 71     switch (sender.tag) {
 72         case buttonTypeRotateL:
 73             form = CGAffineTransformRotate(form, -M_2_PI/2);
 74             break;
 75         case buttonTypeRotateR:
 76             form = CGAffineTransformRotate(form, M_2_PI/2);
 77             break;
 78     }
 79     self.viewMan.transform = form;
 80 }
 81 
 82 //放缩
 83 - (IBAction)buttonScaleClicked:(UIButton *)sender
 84 {
 85     //子视图这个控件的坐标矩阵
 86     CGAffineTransform form = self.viewMan.transform;
 87     CGFloat scaleFator = 0.0f;
 88     
 89     switch (sender.tag) {
 90         case buttonTypeScaleUp:
 91             scaleFator = 1.2;
 92             break;
 93         case buttonTypeScaleDown:
 94             scaleFator = 0.8;
 95             break;
 96     }
 97     form = CGAffineTransformScale(form, scaleFator, scaleFator);
 98     self.viewMan.transform = form;
 99 }
100 
101 - (void)viewDidLoad {
102     [super viewDidLoad];
103     // Do any additional setup after loading the view, typically from a nib.
104 }
105 
106 - (void)didReceiveMemoryWarning {
107     [super didReceiveMemoryWarning];
108     // Dispose of any resources that can be recreated.
109 }
110 
111 @end
复制代码

 

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!


本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/4761646.html,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
移动开发 安全 数据安全/隐私保护
iOS 全局自动化代码混淆工具!支持 cocoapod 组件代码一并混淆
iOS 全局自动化代码混淆工具!支持 cocoapod 组件代码一并混淆
|
10月前
|
iOS开发
iOS 多个滚动控件嵌套Demo
iOS 多个滚动控件嵌套Demo
49 0
|
10月前
|
iOS开发
iOS 常用的 上下左右 拉刷新控件
iOS 常用的 上下左右 拉刷新控件
59 0
|
iOS开发
iOS短信验证码控件,自动输入回调两次解决办法
iOS短信验证码控件,自动输入回调两次解决办法
372 0
|
iOS开发
IOS的UITableView控件简单使用
IOS的UITableView控件简单使用
134 0
|
网络协议 开发工具 git
iOS 制作组件库上传到CocoaPods
iOS 制作组件库上传到CocoaPods
iOS 制作组件库上传到CocoaPods
|
iOS开发
iOS开发 - 写一个刷新的控件(未封装,适合新手学习,查看原理)
iOS开发 - 写一个刷新的控件(未封装,适合新手学习,查看原理)
135 0
iOS开发 - 写一个刷新的控件(未封装,适合新手学习,查看原理)
|
安全 iOS开发
iOS小技能:下拉刷新控件的适配
1. 下拉顶部背景色设置: 往tableView的父控件添加拉伸背景视图 2. present 半屏适配 iOS13 modalPresentationStyle属性默认不是全屏样式`UIModalPresentationFullScreen`,而是半屏样式,需要根据需求手动设置。 present 半屏,会导致列表下拉刷新失效。
175 0
iOS小技能:下拉刷新控件的适配
|
iOS开发
iOS小技能:自动布局实现兄弟控件N等分且宽高比例是1:N(xib 上实现)
本文为 iOS视图约束专题的第三篇:xib上使用自动布局教程
154 0
|
Go iOS开发
iOS使用xib自定义uiview
iOS使用xib自定义uiview
335 0
iOS使用xib自定义uiview