『IOS』使用優雅的錨點開發ios
原文地址:http://www.poboke.com/study/use-the-anchor-point-in-ios-development.html
做ios開發時,有很多東西都用不慣,比如沒有單獨設定view的位置和大小的方法,而要把位置和大小一起初始化,感覺有點麻煩。
在cocos2d裡就非常方便,因為cocos2d的錨點可以很方便地設定子檢視的位置,而ios裡沒有錨點這個概念。
所以我把cocos2d的錨點移植到了ios裡,並做了一些修改,使其成為了有著ios特色的錨點。
cocos2d裡採用OpenGL ES座標系,座標原點在螢幕左下角。而ios採用的是Quartz 2D座標系,座標原點在螢幕左上角。
在cocos2d和ios中分別把檢視的座標點設為(10,10),結果如下:
http://www.poboke.com/wp-content/uploads/2014/07/anchor_coordinate.png
因為cocos2d的檢視是以檢視的中心位置設定座標點的,而ios的檢視是以左上角設定座標點的。
那麼什麼是錨點呢?下面以一個例子來說明:
比如要建立以下兩個檢視,藍色檢視左上角在座標(5,4)處,而橙色檢視右邊和藍色檢視對齊,有一半的高度處於藍色檢視外面。
UIView *blueView = [[UIView alloc] initWithFrame:CGRectMake(5, 4, W, H)];blueView.backgroundColor = [UIColor blueColor];[self.view addSubview:blueView]; UIView *orangeView
= [[UIView alloc] initWithFrame:CGRectMake(W-w, H-h/2, w, h)];orangeView.backgroundColor = [UIColor orangeColor];[blueView addSubview:orangeView];
按照ios標準的建立檢視的寫法可以這樣寫程式碼:
UIView *blueView = [[UIView alloc] initWithFrame:CGRectMake(5, 4, W, H)];blueView.backgroundColor = [UIColor blueColor];[self.view addSubview:blueView]; UIView
*orangeView = [[UIView alloc] initWithFrame:CGRectMake(W-w, H-h/2, w, h)];orangeView.backgroundColor = [UIColor orangeColor];[blueView addSubview:orangeView];
可以看到建立檢視時就要計算檢視左上角的座標,非常麻煩。而使用了錨點的程式碼可以這樣寫:
- UIView *blueView = [[UIView alloc] initWithSize:CGSizeMake(W, H)];
- [blueView setPosition:CGPointMake(5, 4) atAnchorPoint:CGPointMake(0, 0)];
- blueView.backgroundColor = [UIColor blueColor];
- [self.view addSubview:blueView];
- UIView *orangeView = [[UIView alloc] initWithSize:CGSizeMake(w, h)];
- [orangeView setPosition:CGPointMake(W, H) atAnchorPoint:CGPointMake(1, 0.5)];
- orangeView.backgroundColor = [UIColor orangeColor];
- [blueView addSubview:orangeView];
可見程式碼十分優雅,一開始先初始化檢視大小,然後再設定檢視的位置。
橙色檢視的座標點是(W, H),錨點是(1, 0.5),通過這兩個點就可以設定檢視的準確位置了,根本就不用去計算橙色檢視的左上角的座標(W – w, H – h/2)。
可以這樣說:錨點是子檢視用來設定位置的一個定位點,使用錨點就不會用子檢視的寬高參與計算,省去了麻煩的計算,從而讓程式碼更優雅。
從下圖可知,錨點的取值範圍是[0, 1]。
設定一個子檢視的座標時,錨點(0, 0)表示把子檢視的左上角放到該座標的位置,錨點(0.5, 0.5)表示把子檢視的中點放到該座標的位置。
通過category為UIView新增設定錨點的方法,所有view的子類就可以使用該方法。
程式碼見https://github.com/poboke/OCElegant
下載UIView+Frame檔案,新增到工程裡即可,這個類裡面自定義了一些獲取和設定view的大小和位置的方法,比如設定錨點的方法:
- - (void)setPosition:(CGPoint)point atAnchorPoint:(CGPoint)anchorPoint
- {
- CGFloat x = point.x - anchorPoint.x * self.width;
- CGFloat y = point.y - anchorPoint.y * self.height;
- [self setOrigin:CGPointMake(x, y)];
- }
程式碼裡通過self.width就能取到view的寬度了,而不用寫self.frame.size.width。
通過程式碼也可以清楚地知道:實現錨點的方法其實很簡單,就是在setPosition:atAnchorPoint:方法裡面利用錨點和子檢視的寬高進行計算,從而調整了子檢視的位置。
相關文章
- iOS中優雅的使用iconfontiOS
- iOS如何安全而又優雅的使用NSTimeriOS
- 錨點的使用
- iOS開發之XLForm的使用iOSORM
- 整理:iOS開發知識點iOS
- iOS開發Settings.bundle的使用iOS
- 玩轉iOS開發:iOS中的NSOperation開發(一)iOS
- 【iOS開發】iOS App的加固保護原理:使用ipaguard混淆加固iOSAPP
- iOS開發 - Xcode不走斷點iOSXCode斷點
- iOS開發之使用Git的基本使用(二)iOSGit
- iOS開發之使用Git的基本使用(一)iOSGit
- iOS開發-UITabbarController的介紹與使用iOSUItabBarController
- 關於iOS開發中copy的使用iOS
- iOS 開發iOS
- iOS開發之UIRefreshControl使用踩坑iOSUI
- iOS開發-WKWebView的介紹與基本使用iOSWebView
- iOS開發- UILabel的基本介紹與使用iOSUI
- iOS開發-使用Safari除錯iOS APP H5頁面iOS除錯APPH5
- ios蘋果企業簽名的優點iOS蘋果
- 對於iOS效能優化的一點看法iOS優化
- iOS開發-MVCiOSMVC
- iOS開發- RunLoopiOSOOP
- iOS開發-UIButtoniOSUI
- iOS開發:UIAlertViewiOSUIView
- iOS 開發薪水iOS
- iOS開發的那些坑iOS
- iOS的鏈式開發iOS
- iOS的元件化開發iOS元件化
- iOS開發基礎107-iOS直播iOS
- 玩轉iOS開發:iOS開發中的裝逼技術 – RunTime(一)iOS
- 玩轉iOS開發:iOS開發中的裝逼技術 – RunTime(二)iOS
- iOS開發中使用OC和swift的對比iOSSwift
- [iOS開發]Carthage安裝和使用教程iOS
- angular中使用a標籤的錨點Angular
- iOS遠端hot patch的優點和風險iOS
- ios蘋果企業簽名優點iOS蘋果
- 玩轉iOS開發:iOS 10 新特性《UserNotifications》iOS
- iOS開發- tableView的協議iOSView協議
- iOS開發中常用的鎖iOS