iOS中關(guān)于center和size的設(shè)置的順序問題

一、首先我們舉一個小栗子:

1.代碼中先設(shè)置了size,然后再設(shè)置了center

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    UIView *temp = [[UIView alloc] init];
    temp.backgroundColor = [UIColor redColor];
    [self.view addSubview:temp];
    
    // center 和 size 的設(shè)置的順序
    // 設(shè)置size
    CGRect frame = temp.frame;
    frame.size = CGSizeMake(100, 100);
    temp.frame = frame;
    
    // 設(shè)置center
    temp.center = CGPointMake(self.view.frame.size.width * 0.5, self.view.frame.size.height * 0.5);
    
}

@end

運行結(jié)果如下:


先size,后center

可以看出跟我們預(yù)想的是一樣的,100*100的紅色view在正中間。
然后我們再顛倒下順序。

2.先設(shè)置center,再設(shè)置size:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    UIView *temp = [[UIView alloc] init];
    temp.backgroundColor = [UIColor redColor];
    [self.view addSubview:temp];
    
    // center 和 size 的設(shè)置的順序
    // 設(shè)置center
    temp.center = CGPointMake(self.view.frame.size.width * 0.5, self.view.frame.size.height * 0.5);
    // 設(shè)置size
    CGRect frame = temp.frame;
    frame.size = CGSizeMake(100, 100);
    temp.frame = frame;

}

@end

運行結(jié)果如下:


先center,后size

這次的運行結(jié)果卻跟上面的結(jié)果不同。
什么原因呢?

二、問題解釋:

我們看上面的代碼中:

    UIView *temp = [[UIView alloc] init];
    temp.backgroundColor = [UIColor redColor];
    [self.view addSubview:temp];

我們只是創(chuàng)建了名為temp的紅色view,放到了ViewController中,沒有設(shè)置他的X、Y、W、H。
也就是說temp現(xiàn)在是一個“點”,而且這個點在屏幕左上角,我們是看不到的。

1.先size,后center:

在創(chuàng)建了view之后,我們先給了他size,也就是說他的寬高是確定了的(100*100),然后與此同時,他是在左上角的(這也間接證明了上文粗體字),并且center,即中心點,便出現(xiàn)了。

出現(xiàn)在左上角的temp

然后我們通過center,通過控制中心點,來控制temp的位置,這樣很明顯,就可以實現(xiàn)temp出現(xiàn)在屏幕正中間。

2.先center,后size:

在創(chuàng)建了temp之后,我們需要知道,他是一個“點”,這個“點”,既是左上角的點,又是temp的中心點
然后我們通過控制這個看不見的點的“中心點”,來控制它的位置。

看不見的點

然后到現(xiàn)在為止,這個點在正中間,即,center已經(jīng)設(shè)置完畢,在正中間,那么temp的左上角也在正中間(都是同一個點)。
然后我們再設(shè)置寬高的時候,就是以 temp左上角/屏幕中心點, 為(0,0),這樣當(dāng)temp寬高為100的時候,temp的位置就偏移了,我們可以發(fā)現(xiàn),temp的左上角在屏幕正中間。如圖:
注意看temp的左上角的位置

三、總結(jié):

所以到現(xiàn)在,大家應(yīng)該明白了其問題所在。
那么解決辦法也很簡單:
先設(shè)置size,即寬高,再通過設(shè)置center來設(shè)置其位置

說的很啰嗦,但個人覺得挺詳細(xì)的,希望有錯誤之處、不足之處大家可以提出來,我們共同進步哈~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺ios動畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,689評論 6 30
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺iOS動畫全貌。在這里你可以看...
    F麥子閱讀 5,268評論 5 13
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,979評論 25 709
  • 轉(zhuǎn)載:http://www.cocoachina.com/swift/20161201/18198.html 前言...
    F麥子閱讀 4,499評論 2 8
  • 年齡只是個符號,毋需時刻記頭腦。 心態(tài)年輕就不老,如松屹立用不倒。 最近是各大時尚品牌的秀場正盛時,看著型...
    鑲鉆白骨精閱讀 2,274評論 0 0

友情鏈接更多精彩內(nèi)容