你會注意到附加屏幕截圖中的紅色「+」/「箭頭」字形。在Xcode中更改這個「原點」很容易。有沒有也一種方式來做到這一點編程或完全是一個Xcode抽象?如何以編程方式更改UIView的「原點」(如Xcode中所標記的)?
比如,我想通過計算右下角座標編程方式創建一個UILabel和它的位置。在Xcode中,我只需確保紅色的「+」位於右下方的網格點上,並在頭腦中定義了X,Y,寬度和高度參數。
你會注意到附加屏幕截圖中的紅色「+」/「箭頭」字形。在Xcode中更改這個「原點」很容易。有沒有也一種方式來做到這一點編程或完全是一個Xcode抽象?如何以編程方式更改UIView的「原點」(如Xcode中所標記的)?
比如,我想通過計算右下角座標編程方式創建一個UILabel和它的位置。在Xcode中,我只需確保紅色的「+」位於右下方的網格點上,並在頭腦中定義了X,Y,寬度和高度參數。
如果您未使用自動佈局,您可以通過設置其中心來定位代碼中的標籤(或任何視圖)。所以,如果你知道你要在標籤的右下角是,你可以減去寬度和高度的一半標籤來計算,其中它的中心應該是:
CGPoint lowerRight = somePoint;
CGRect frame = label.frame;
label.center = CGPointMake(lowerRight.x - frame.size.width/2,
lowerRight.y - frame.size.height/2);
我會建議只是這樣做。
但是,如果你想要,你可以去一個較低的水平。每個視圖都有一個核心動畫層,它實際上管理着視圖的屏幕外觀。該圖層具有anchorPoint
屬性,默認情況下爲(0.5,0.5),表示圖層的中心。您可以設置anchorPoint
到(1,1)的右下角:
label.layer.anchorPoint = CGPointMake(1, 1);
現在標籤的center
實際控制右下角的位置,這樣你就可以直接設置它:
label.center = somePoint; // actually sets the lower right corner
您需要將QuartzCore
框架添加到您的目標並導入<QuartzCore/QuartzCore.h>
以修改anchorPoint
屬性。
myObject.origin = CGPointMake (0.0,0.0);
不幸的是,這只是設置原點的「座標」。我想改變「起源」實際引用的內容。看到Rob的回答。默認情況下,「原點」指的是左上角,使得「原點」點爲0,0,寬度爲35平均值,控件將擴展到右側35像素。這不是我想要的。我希望它延伸到左側35像素。要做到這一點,「原點」本身必須指向右下角,而不是默認的左上角。在Xcode IB中用一個實際的XIB嘗試它,你會明白我的意思。移動該「+」號並觀察X,Y,寬度和高度值的變化。 –
完美! 「layer.anchorPoint」就是我一直在尋找的東西。 –
順便說一下,當您更改紅色原點定位器時,Interface Builder(Xcode的XIB/Storyboard編輯器部分)實際上並未修改視圖圖層的錨點。無論原點定位器的設置如何,您的視圖總是會以(0.5,0.5)的錨點出現在筆尖上。 –