iOS:UIView视图与组件控件

http://www.cnblogs.com/XYQ-208910/p/4761646.html

一、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. 两个矩阵仿射为一个新的矩阵:

CGAffineTransformCGAffineTransformConcat(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:

1#import"ViewController.h"

2typedefenum

3{

4buttonTypeLeft=1,

5buttonTypeRight,

6buttonTypeUp,7buttonTypeDown,8buttonTypeRotateL,9buttonTypeRotateR,10buttonTypeScaleUp,11buttonTypeScaleDown,1213}buttonType;14@interfaceViewController ()

15@property (weak, nonatomic) IBOutlet UIView *viewMan;

1617@end

1819@implementationViewController

20//移动方向

21- (IBAction)buttonDirectionClicked:(UIButton *)sender22{23//父视图的长度和高度24NSInteger screenWidth =self.view.frame.size.width;25NSInteger screenHeight =self.view.frame.size.height;2627//子视图28CGRect rect =self.viewMan.frame;29//每次移动距离30NSInteger offset =5;31//父控件通过tag标识获取视图中子控件(组件)32switch(sender.tag)33{34casebuttonTypeDown:35rect.origin.y +=offset;36if(rect.origin.y >=screenHeight)37{38rect.origin.y = -rect.size.height;39}40break;41casebuttonTypeUp:42rect.origin.y -=offset;43if(rect.origin.y <= -rect.size.height)44{45rect.origin.y =screenHeight;46}47break;48casebuttonTypeLeft:49rect.origin.x -=offset;50if(rect.origin.x <= -rect.size.width)51{52rect.origin.x =screenWidth;53}54break;55casebuttonTypeRight:56rect.origin.x +=offset;57if(rect.origin.x >=screenWidth)58{59rect.origin.x = -rect.size.width;60}61break;62}63self.viewMan.frame =rect;64}6566//旋转67- (IBAction)buttonRotateClicked:(UIButton *)sender68{69//子视图这个控件的坐标矩阵70CGAffineTransform form =self.viewMan.transform;71switch(sender.tag) {72casebuttonTypeRotateL:73form = CGAffineTransformRotate(form, -M_2_PI/2);

74break;

75casebuttonTypeRotateR:

76form = CGAffineTransformRotate(form, M_2_PI/2);77break;78}

79self.viewMan.transform =form;80}

8182//放缩

83- (IBAction)buttonScaleClicked:(UIButton *)sender

84{85//子视图这个控件的坐标矩阵

86CGAffineTransform form =self.viewMan.transform;

87CGFloat scaleFator =0.0f;

8889switch(sender.tag) {

90casebuttonTypeScaleUp;

91scaleFator =1.2;

92break;

93casebuttonTypeScaleDown:

94scaleFator =0.8;

95break;

96}

97form =CGAffineTransformScale(form, scaleFator, scaleFator);

98self.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


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,817评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,329评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,354评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,498评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,600评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,829评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,979评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,722评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,189评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,519评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,654评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,940评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,762评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,993评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,382评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,543评论 2 349

推荐阅读更多精彩内容

  • Quartz2D以及drawRect的重绘机制字数1487 阅读21 评论1 喜欢1一、什么是Quartz2D Q...
    PurpleWind阅读 766评论 0 3
  • >*很不幸,没人能告诉你母体是什么,你只能自己体会* --骇客帝国 在第四章“可视效果”中,我们研究了一些增强图层...
    夜空下最亮的亮点阅读 1,656评论 0 2
  • UIView(控件) 功能一:界面显示1. 屏幕上显示的所有UI元素都叫做控件,也有人叫做视图、组件;按钮(UIB...
    翻这个墙阅读 628评论 0 0
  • VLC的集成和使用 VLC介绍 VLC Media Player (VideoLAN) 为 Windows、Lin...
    Pocket阅读 19,549评论 75 66
  • 一、时差的国度,视频里的团年饭 家人团年饭定在11点,说晚饭要在部队食堂团年! 于是闹钟定在05:45,视个频看你...
    紫蒲溪溪主阅读 147评论 2 2