iOS自动布局是设置iOS界面的利器.
本实例展示了如何使用自动布局语言设置水平布局, 垂直布局
1. 创建空白iOS项目
2. 添加一个控制器类, 修改YYAppDelegate.m文件
#import "YYAppDelegate.h"
#import "YYViewController.h"@implementation YYAppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];self.window.rootViewController = [[YYViewController alloc] initWithNibName:nil bundle:nil];
[self.window makeKeyAndVisible];
return YES;
}
3. 修改控制器类
1 //
2 // YYViewController.m
3 // UIBasic060701_Button
4 //
5 // Created by yao_yu on 14-6-7.
6 // Copyright (c) 2014年 yao_yu. All rights reserved.
7 //
8
9 #import "YYViewController.h"
10
11 @interface YYViewController ()
12
13 @property(nonatomic, strong) UIView *viewMoveBlock;
14
15 @end
16
17 @implementation YYViewController
18
19 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
20 {
21 self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
22 if (self) {
23 // Custom initialization
24 }
25 return self;
26 }
27
28 - (void)viewDidLoad
29 {
30 [super viewDidLoad];
31
32 self.viewMoveBlock = [[UIView alloc] init];
33 [self.viewMoveBlock setBackgroundColor:[UIColor blueColor]];
34 self.viewMoveBlock.frame = CGRectMake(100, 100, 20, 20);
35 [self.view addSubview: self.viewMoveBlock];
36
37 UIView *commandPane = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 160, 40)];
38 [self.view addSubview:commandPane];
39
40 const CGFloat BUTTONSIZE = 40;
41 UIButton *buttonLeft = [UIButton buttonWithType:UIButtonTypeRoundedRect];
42 [buttonLeft setTitle:@"左移" forState:UIControlStateNormal];
43 buttonLeft.frame = CGRectMake(0, 0, BUTTONSIZE, BUTTONSIZE);
44 [commandPane addSubview: buttonLeft];
45 [buttonLeft addTarget:self action:@selector(moveLeft) forControlEvents:UIControlEventTouchUpInside];
46
47 UIButton *buttonRight = [UIButton buttonWithType:UIButtonTypeRoundedRect];
48 [buttonRight setTitle:@"右移" forState:UIControlStateNormal];
49 buttonRight.frame = CGRectMake(BUTTONSIZE, 0, BUTTONSIZE, BUTTONSIZE);
50 [commandPane addSubview: buttonRight];
51 [buttonRight addTarget:self action:@selector(moveRight) forControlEvents:UIControlEventTouchUpInside];
52
53 UIButton *buttonUp = [UIButton buttonWithType:UIButtonTypeRoundedRect];
54 [buttonUp setTitle:@"上移" forState:UIControlStateNormal];
55 buttonUp.frame = CGRectMake(BUTTONSIZE*2, 0, BUTTONSIZE, BUTTONSIZE);
56 [commandPane addSubview: buttonUp];
57 [buttonUp addTarget:self action:@selector(moveUp) forControlEvents:UIControlEventTouchUpInside];
58
59 UIButton *buttonDown = [UIButton buttonWithType:UIButtonTypeRoundedRect];
60 [buttonDown setTitle:@"下移" forState:UIControlStateNormal];
61 buttonDown.frame = CGRectMake(BUTTONSIZE*3, 0, BUTTONSIZE, BUTTONSIZE);
62 [commandPane addSubview: buttonDown];
63 [buttonDown addTarget:self action:@selector(moveDown) forControlEvents:UIControlEventTouchUpInside];
64
65 UIButton *buttonZoomOut = [UIButton buttonWithType:UIButtonTypeRoundedRect];
66 [buttonZoomOut setTitle:@"放大" forState:UIControlStateNormal];
67 buttonZoomOut.frame = CGRectMake(BUTTONSIZE*4, 0, BUTTONSIZE, BUTTONSIZE);
68 [commandPane addSubview: buttonZoomOut];
69 [buttonZoomOut addTarget:self action:@selector(zoomOut) forControlEvents:UIControlEventTouchUpInside];
70
71 UIButton *buttonZoomIn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
72 [buttonZoomIn setTitle:@"缩小" forState:UIControlStateNormal];
73 buttonZoomIn.frame = CGRectMake(BUTTONSIZE*5, 0, BUTTONSIZE, BUTTONSIZE);
74 [commandPane addSubview: buttonZoomIn];
75 [buttonZoomIn addTarget:self action:@selector(zoomIn) forControlEvents:UIControlEventTouchUpInside];
76
77 [commandPane setTranslatesAutoresizingMaskIntoConstraints:NO];
78 [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"[commandPane(260)]" options:0 metrics:0 views:NSDictionaryOfVariableBindings(commandPane)]];
79 [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[commandPane(50)]" options:0 metrics:0 views:NSDictionaryOfVariableBindings(commandPane)]];
80 [self.view addConstraint:[NSLayoutConstraint constraintWithItem:commandPane attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0f constant:0.0f]];
81
82 NSDictionary *metrics = [NSDictionary dictionaryWithObjectsAndKeys:@40, @"SIZE", nil];
83 NSDictionary *contraitsView = NSDictionaryOfVariableBindings(buttonLeft, buttonRight, buttonUp, buttonDown, buttonZoomOut, buttonZoomIn);
84 for (NSString *buttonKey in contraitsView ) {
85 [contraitsView[buttonKey] setTranslatesAutoresizingMaskIntoConstraints:NO];
86 [commandPane addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"V:|[%@(SIZE)]", buttonKey] options:0 metrics:metrics views:contraitsView]];
87 }
88 [commandPane addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[buttonLeft(SIZE)][buttonRight(SIZE)][buttonUp(SIZE)][buttonDown(SIZE)]-(>=0)-[buttonZoomOut(SIZE)][buttonZoomIn(SIZE)]|" options:0 metrics:metrics views: contraitsView]];
89 }
90
91 -(void)moveLeft
92 {
93 [self moveX: -20 Y:0];
94 }
95
96 -(void)moveRight
97 {
98 [self moveX: 20 Y:0];
99 }
100
101 -(void)moveUp
102 {
103 [self moveX: 0 Y:-20];
104 }
105
106 -(void)moveDown
107 {
108 [self moveX: 0 Y:20];
109 }
110
111 -(void)zoomOut
112 {
113 CGRect rect = self.viewMoveBlock.frame;
114
115 rect.origin.x -= 20;
116 rect.origin.y -= 20;
117 rect.size.width += 40;
118 rect.size.height += 40;
119
120
121 [UIView beginAnimations:nil context:nil];
122 [UIView setAnimationDuration:1.0];
123
124 self.viewMoveBlock.frame = rect;
125
126 [UIView commitAnimations];
127 }
128
129 -(void)zoomIn
130 {
131 CGRect rect = self.viewMoveBlock.frame;
132
133 rect.origin.x += 20;
134 rect.origin.y += 20;
135 rect.size.width -= 40;
136 rect.size.height -= 40;
137
138
139 [UIView beginAnimations:nil context:nil];
140 [UIView setAnimationDuration:1.0];
141
142 self.viewMoveBlock.frame = rect;
143
144 [UIView commitAnimations];
145 }
146
147 -(void)moveX: (int)x Y:(int)y
148 {
149 CGPoint p = self.viewMoveBlock.center;
150
151 p.x += x;
152 p.y += y;
153
154 [UIView beginAnimations:nil context:nil];
155 [UIView setAnimationDuration:1.0];
156
157 self.viewMoveBlock.center = p;
158
159 [UIView commitAnimations];
160 }
161
162 - (void)didReceiveMemoryWarning
163 {
164 [super didReceiveMemoryWarning];
165 // Dispose of any resources that can be recreated.
166 }
167
168 /*
169 #pragma mark - Navigation
170
171 // In a storyboard-based application, you will often want to do a little preparation before navigation
172 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
173 {
174 // Get the new view controller using [segue destinationViewController].
175 // Pass the selected object to the new view controller.
176 }
177 */
178
179 @end
4. 运行
iOS: 学习笔记, 用代码驱动自动布局实例,布布扣,bubuko.com
时间: 2024-10-01 12:13:35