最近開始實習,沒多少時間更新了=_=
第九課:
1、上節課demo:Dropit完整實現
https://github.com/NSLogMeng/Stanford_iOS7_Study/commit/cfc24c2c4300185d972cf151872d313414a48d32
2、Autolayout
比較簡單請參照課件截圖https://github.com/NSLogMeng/Stanford_iOS7_Study/blob/master/Slides/Lecture%209%20Slides.pdf
課程實現方法為在storyboard中可視化實現,本文再介紹兩種方法:
?、貼SLayoutConstraint
+(instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation) relation toItem:(id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c;//約束:item1.attribute =(>=,<=related) multiplier * item2.attribute + constant//使用UIView添加約束- (void)addConstraint:(NSLayoutConstraint *)constraint
?、赩isual Format Language(VFL)
官方文檔很簡單易懂
語法:
含義 | 語法 | 含義 | 語法 |
水平方向 | H: | 關系 | >=,<=,== |
垂直方向 | V: | 空間,間隙 | - |
Views | [view] | 優先級 | @value |
superView | | |
舉例:
代碼實現舉例:
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. UIButton *button1 = [[UIButton alloc] init]; button1.backgroundColor = [self randomColor]; [button1 setTitle:@"button1" forState:UIControlStateNormal]; button1.translatesAutoresizingMaskIntoConstraints = NO;//手動創建的代碼使用VFL必須更改此屬性 button1.layer.cornerRadius = 4.0f; [self.view addSubview:button1]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[button1]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(button1)]]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[button1(width)]" options:0 metrics:@{@"width" : @30} views:NSDictionaryOfVariableBindings(button1)]]; UIButton *button2 = [[UIButton alloc] init]; button2.backgroundColor = [self randomColor]; [button2 setTitle:@"button2" forState:UIControlStateNormal]; button2.translatesAutoresizingMaskIntoConstraints = NO;//手動創建的代碼使用VFL必須更改此屬性 button2.layer.cornerRadius = 4.0f; [self.view addSubview:button2]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[button2]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(button2)]]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[button1]-44-[button2(30)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(button1,button2)]]; UITabBar *tabBar = [[UITabBar alloc] init]; tabBar.barTintColor = [UIColor colorWithRed:102/255.0f green:204/255.0f blue:255/255.0f alpha:1.0f]; tabBar.translatesAutoresizingMaskIntoConstraints = NO;//手動創建的代碼使用VFL必須更改此屬性 UITabBarItem *item1 = [[UITabBarItem alloc] init]; [item1 setTitle:@"item1"]; UITabBarItem *item2 = [[UITabBarItem alloc] init]; [item2 setTitle:@"item2"]; UITabBarItem *item3 = [[UITabBarItem alloc] init]; [item3 setTitle:@"item3"]; tabBar.items = @[item1,item2,item3]; [self.view addSubview:tabBar]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[tabBar]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(tabBar)]]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[tabBar(45)]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(tabBar)]]; [button1 addTarget:self action:@selector(touchButton1) forControlEvents:UIControlEventTouchDown]; }
注意:①代碼創建的view要加 button1.translatesAutoresizingMaskIntoConstraints = NO;才能生效
②metrics存儲VFL中可變量的值(字典),可以參考button1的約束
③views參數對應VFL中View的值(通過NSDictionaryOfVariableBindings(...)實現)
3、作業
還沒做=_=,后面補。
課程視頻地址:網易公開課:http://open.163.com/movie/2014/1/B/P/M9H7S9F1H_M9H80K2BP.html
或者iTunes U搜索standford課程
新聞熱點
疑難解答