4

ビュー内でサブビューを中央に配置する方法を説明するコードがたくさん表示されています。コード例は通常、次のようになります。

SubView.center = view.center;

誰かがこれがどのように機能するかを私に説明できますか?わからない。

view.center、ビューの中心点を示します。たとえば、幅が100、高さが100の場合、(50,50)が返されます。わかった。

設定subview.centerは私には奇妙です。 subview.centerサブビューの中心点を返します。どういうわけか、それを(50,50)に設定すると、親内のサブビューが50/50の座標に配置されます。ただし、サブビュー自体の幅が50、高さが50の場合、このプロパティにアクセスすると、たとえば(25,25)が返されます。

私が何を意味するのか理解できませんか?セッターとゲッターが異なる機能を果たしているので、ここでの概念は私には奇妙です。

誰かがこれを説明できるなら、してください。または、私が基地から離れている場合は、それも知りたいです。私はiOS開発に不慣れです。

私が正しく、これが実際に機能する方法である場合、これをアンチパターンとは見なしませんか。確かに、.NET内では、このようなものはアンチパターンになります。たぶんObj-Cではないのですか?

4

4 に答える 4

7

To centre a subview inside a view. I think following code is correct.

Swift 3.0:

SubView.center = CGPoint(x: view.bounds.midX, y: view.bounds.midY );

Swift 2.2:

SubView.center = CGPointMake( CGRectGetMidX( view.bounds ), CGRectGetMidY( view.bounds ) );
于 2014-04-24T08:48:37.503 に答える
2

So when setting it, it is setting it inside it's superview. When getting the subviews center it gives you the actual views center.

So half of 50 is 25, hence 25,25. You are wanting the subview's center not its parent's center so there is no reason for it to return its parent's center coordinates, just its own.

To be a bit more technical it has to related to Frame and Bounds of a view (the getter is getting the center by using the view's bounds and the setter is using the view's frame). Here is a link that describes what those are and how they are different.

于 2013-02-01T14:39:53.877 に答える
1

The view.center gives the center point of the view in the view's superviews coordinate space. So it allows you to reposition a view within it's superview.

If you have a view size {100,100} and set it's center {200,200} - it's centerpoint will be positioned {200,200} from the origin of it's superview. Effectively it will be inset 150 points from the superview's origin.

Thus the view.center and view.bounds.width are not related to each other. But there is a relationship between view.center and view.frame.origin (which in the example will be {150,150}).

This allows you to fix the size and position of a view object either by using it's frame property or by setting it's center and bounds properties.

The center that you describe is not a property of the view, but can be got and set via {view.bounds.size.width/2,view.bounds.size.height/2}.

于 2013-02-01T14:40:10.090 に答える
0

From the class ref of UIView: "The center is specified within the coordinate system of its superview". So, in your example, if you set the center to (50,50) in the superview (via the setter method), the subview will be centered there. And if you read it back (via the getter), it will also be (50,50).

于 2013-02-01T14:44:17.037 に答える