我问我的ViewController它的view.center属性并绘制一个新的UIView,它围绕着这个“中心”......我得到(160,250)作为回应。但是当新的UIView在中心下面绘制它时......所以我想知道是谁给了我这个信息以及它与它有什么关系?如果考虑状态栏的20px高度,这显然是视图中心与WINDOW的关系。这将推动视图中心向下10px。但是在绘制myView时,它似乎与ViewController.view而不是Window相关,因此它显示在中心下方20px ...
我希望ViewController能给我它的中心(160,230)所以我可以在它的中心绘制...我是否需要手动计算状态栏并每次从高处减去20?还是有一些我忽视的观看空间翻译?来自ViewController.m:
- (void)setUpMyView {
// Create my view
MyView *aView = [[MyView alloc] init];
self.myView = aView;
[aView release];
myView.center = self.view.center;
NSLog(@"CenterX: %f, Y: %f", self.view.center.x, self.view.center.y);
CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI_2);
myView.transform = transform;
[self.view addSubview:myView];
}
console:CenterX:160.000000,Y:250.000000
答案 0 :(得分:10)
它实际上不是“撒谎”,而是在不同的坐标系中给出答案。
获取或设置视图的中心时,相对于父的坐标系计算。 self.view
的父级是应用程序的窗口,因此你猜测它的中心是(160,250)。但是myView
的父级是self.view
,它有自己的本地坐标系。在这种情况下,该坐标系比窗口的坐标系低20个像素。
您想要的是在{strong>拥有坐标系中找到self.myView
的中心。有两种方法可以做到。
1)您可以根据bounds
属性计算它,CGRect
属性是UIView
,用于指定视图在其坐标系中的边界:
myView.center = CGPointMake(self.view.bounds.size.width / 2, self.view.bounds.size.height / 2);
2)或者您可以使用convertPoint:fromView:
的{{1}}方法将坐标从窗口的坐标系转换为self.view
的坐标:
// Pass nil as the source view to convert from the window's coordinate system myView.center = [self.view convertPoint:self.view.center fromView:nil];
答案 1 :(得分:0)
在询问其中心和大小之前,可能会将其添加到子视图中。
MyView *aView = [[MyView alloc] init];
self.myView = aView;
[aView release];
[self.view addSubview:myView]; // add it to the subview first before asking center.
myView.center = self.view.center;
NSLog(@"CenterX: %f, Y: %f", self.view.center.x, self.view.center.y);
CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI_2);
myView.transform = transform;
答案 2 :(得分:0)
我想我知道答案。你查看中心是正确的!
您忘记添加iPhone状态栏从屏幕顶部向下20px,因此包含在您的视图中心。宾果