一、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

 #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视图与组件控件的更多相关文章

  1. IOS 设置视图半透明子控件不透明

    代码处理: UIColor *color = [[UIColor blackColor] colorWithAlphaComponent:0.6]; self.view.backgroundColor ...

  2. iOS开发UI篇—UIScrollView控件介绍

    iOS开发UI篇—UIScrollView控件介绍 一.知识点简单介绍 1.UIScrollView控件是什么? (1)移动设备的屏幕⼤大⼩小是极其有限的,因此直接展⽰示在⽤用户眼前的内容也相当有限 ...

  3. iOS开发UI篇—UITableview控件基本使用

    iOS开发UI篇—UITableview控件基本使用 一.一个简单的英雄展示程序 NJHero.h文件代码(字典转模型) #import <Foundation/Foundation.h> ...

  4. ios开发中关闭textview控件的虚拟键盘

    在ios开发中,textfield控件在点击的时候出现虚拟键盘,关掉虚拟键盘可以通过虚拟键盘中的done button和点击view中的任意地方来关闭虚拟键盘. 1.第一种方法是textfield控件 ...

  5. iOS开发UI篇—UIScrollView控件实现图片缩放功能

    iOS开发UI篇—UIScrollView控件实现图片缩放功能 一.缩放 1.简单说明: 有些时候,我们可能要对某些内容进行手势缩放,如下图所示 UIScrollView不仅能滚动显示大量内容,还能对 ...

  6. iOS开发UI篇—UITableview控件简单介绍

    iOS开发UI篇—UITableview控件简单介绍 一.基本介绍 在众多移动应⽤用中,能看到各式各样的表格数据 . 在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView,UIT ...

  7. Android各组件/控件间通信利器之EventBus

    实际项目开发过程中,经常遇到如下场景:不同的应用程序组件的控件间具有一定的相互关联性,其中用户对后者进行的某种操作会引起前者的相应改变.举一个具体的场景:以糗事百科为例,在糗事列表页和详情页页,对于每 ...

  8. iOS开发UI篇—UITableview控件使用小结

    iOS开发UI篇—UITableview控件使用小结 一.UITableview的使用步骤 UITableview的使用就只有简单的三个步骤: 1.告诉一共有多少组数据 方法:- (NSInteger ...

  9. iOS开发UI篇—UIScrollView控件实现图片轮播

    iOS开发UI篇—UIScrollView控件实现图片轮播 一.实现效果 实现图片的自动轮播            二.实现代码 storyboard中布局 代码: #import "YYV ...

随机推荐

  1. jenkins定时构建

    打开job的配置界面,在构建触发器栏下有Poll SCM(定时检查源码变更并构建)和Build periodically(周期进行项目构建,不关心源码是否变更) 定时构建语法: * * * * *(和 ...

  2. shell如何向python传递参数,shell如何接受python的返回值

    1.shell如何向python传递参数 shell脚本 python $sendmailCommandPath $optDate python脚本 lastDateFormat = sys.argv ...

  3. web中的相对路径与绝对路径

    1.什么叫绝对路径 相对于WEB应用的跟路径的路径,即任何路径都必须带上contentPath. 2.javaEE中的/代表什么 代表WEB应用的跟路径(需交由Servlet容器处理) 请求转发时. ...

  4. iOS开发之app打包发布流程

    一.准备工作 苹果开发者中心 1.申请苹果开发者账号 首先需要申请苹果开发者账号才能在APP store 里发布应用. 开发者账号分类:(1)个人开发者账号 (2)企业开发者账号 主要的区别是:点击这 ...

  5. 源码之Java集合

    No1: ArrayList的扩容策略是,新容量扩大为原来的1.5倍. ArrayList不是线性安全的,因为没有使用synchronized关键字,但是优点是效率提高了.与之相比,Vector是线性 ...

  6. C# Zip解压缩,规避 [content_types].xml 文件

    使用 System.IO.Packaging.Package 进行压缩和解压时,会自动生成 [content_types].xml 文件. The Structure of the [Content_ ...

  7. poj2676(数独)

    也是一个简单剪枝的dfs.记录所有为0的位置,依次填写,当发现某个空格可选的填写数字已经没有时,说明该支路无效,剪掉. 不算是一个难题吧,但是还是花了不少时间,问题主要出在细节上,行列坐标反了.3乘3 ...

  8. python opencv3 摄像头人脸检测

    git:https://github.com/linyi0604/Computer-Vision # coding:utf8 import cv2 def detect(): # 创建人脸检测的对象 ...

  9. Reading lists for new LISA students(转)

    Research in General How to write a great research paper Basics of machine learning http://www.iro.um ...

  10. perf 工具介绍3

    http://blog.chinaunix.net/uid-10540984-id-3854969.html http://blog.csdn.net/zhangskd/article/details ...