zoukankan      html  css  js  c++  java
  • iOS: 学习笔记, 用代码驱动自动布局实例

    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. 运行

  • 相关阅读:
    Codeforces Round #502 (in memory of Leopoldo Taravilse, Div. 1 + Div. 2) E. The Supersonic Rocket
    Codeforces Round #500 (Div. 2) D
    AtCoder Grand Contest 026 D
    Codeforces Round #495 (Div. 2) Sonya and Matrix
    AtCoder Regular Contest 100 E
    1013 数素数
    1010 一元多项式求导(用while接收输入)
    1009 说反话(字符串、栈)
    L2-006 树的遍历 (后序中序求层序)
    L2-004 这是二叉搜索树吗?
  • 原文地址:https://www.cnblogs.com/yaoyu126/p/3775189.html
Copyright © 2011-2022 走看看