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

时间: 2024-08-13 15:54:40

iOS:UIView视图与组件控件的相关文章

Objective-c: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 f

学习IOS开问题篇--视图的模型控件属性写在私有分类中的原因

在说原型模式之前,我们先来看java里面的深复制和浅复制: 1. 浅复制:被复制的对象的所有变量都持有和原来对象的变量相同的值,而所有的对其他对象的引用都指向原来的对象. 2. 深复制:被复制对象的所有变量都含有与原来对象相同的值,除去那些引用其他变量的对象.那些引用其他对象的变量将指向被复制过来的新对象,而不是原来那些被引用的对象.深复制需要把要复制的对象的所有引用都复制一遍. 这两者的区别就是关于引用对象的处理,浅复制是不考虑引用对象,而深复制需要考虑引用对象的问题. 对java中的clon

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

iOS开发UI篇—UITableview控件基本使用 一.一个简单的英雄展示程序 NJHero.h文件代码(字典转模型) #import <Foundation/Foundation.h> @interface NJHero : NSObject /** * 头像 */ @property (nonatomic, copy) NSString *icon; /** * 名称 */ @property (nonatomic, copy) NSString *name; /** * 描述 */ @

第二课:IOS(App)UIImage控件与TextField控件学习

作为一名实习生我是1.3.5在办公室工作,2.4.6去另一个地方听课学习IOS(app)课程,为了不落下课程,我准备每天晚上把落下的课程自学一遍,把不懂的记下等去听课的时候问老师,希望自己能跟上学习的步伐,不浪费时间.这一课是前几天听的,今天一起也写上了. 第二课:IOS(App)UIImage控件与TextField控件的学习,代码如下 一:UIImage控件代码:把图片添加到视图中并设置大小,这里没有牵涉到图片背景的颜色设置,我猜想应该是没必要去设置的吧,因为没有按钮功能的话背景颜色也看不到

iOS开发UI篇—UIPickerView控件简单介绍

iOS开发UI篇—UIPickerView控件简单介绍 一.UIPickerView 控件 1.简单介绍: 2.示例代码 TXViewController.m文件 1 // Created by 鑫 on 14-10-15. 2 3 // Copyright (c) 2014年 梁镋鑫. All rights reserved. 4 5 // 6 7 8 9 #import "TXViewController.h" 10 11 12 13 @interface TXViewContro

设定当前视图中所有控件字体的方法

     本范例实现的是对界面中所有的控件一次性的设置字体样式.思路是找到父控件,然后遍历子控件.如果子控件是可以修改文字的控件,那么就设置文字.这用到了控件的继承,很多控件都是继承与textview的,所以将控件均转为textview,最后设置字体即可. 布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.

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

实际项目开发过程中,经常遇到如下场景:不同的应用程序组件的控件间具有一定的相互关联性,其中用户对后者进行的某种操作会引起前者的相应改变.举一个具体的场景:以糗事百科为例,在糗事列表页和详情页页,对于每个糗事而言,布局基本一致,在详情页点击了个赞,赞的数量增加,同时赞的图标发生了变化,此时返回到列表页,此糗事上的赞图标以及数量与刚刚详情页的需要保持一致.在举一个例子,对于多个底部导航tab下的资讯类阅读app,在咨询详情页点击了收藏,然后收藏成功,此时回到底部tab中的个人中心,假如个人中心中有我

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

iOS开发UI篇—UITableview控件使用小结 一.UITableview的使用步骤 UITableview的使用就只有简单的三个步骤: 1.告诉一共有多少组数据 方法:- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; 2.告诉每组一共有多少行 方法:- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSIntege

【转】 iOS开发UI篇—UIScrollView控件实现图片轮播

原文:http://www.cnblogs.com/wendingding/p/3763527.html iOS开发UI篇—UIScrollView控件实现图片轮播 一.实现效果 实现图片的自动轮播            二.实现代码 storyboard中布局 代码: 1 #import "YYViewController.h" 2 3 @interface YYViewController () <UIScrollViewDelegate> 4 @property (w