gpt4 book ai didi

iphone - 我的 UIViewController 的中心属性是 "lying"

转载 作者:行者123 更新时间:2023-12-03 19:31:47 25 4
gpt4 key购买 nike

我向我的 ViewController 询问它的 view.center 属性,并绘制一个以这个“中心”为中心的新 UIView...我得到 (160, 250) 作为响应。但是当新的 UIView 绘制时,它位于中心下方......所以我想知道谁给了我这个信息以及它与什么相关?如果考虑到状态栏的 20 像素高度,这显然是 View 中心相对于 WINDOW 的位置。这会将 View 中心向下推 10 像素。但是当绘制 myView 时,它似乎是相对于 ViewController.view 而不是 Window 进行绘制的,因此它出现在中心下方 20px 处...

我希望 ViewController 给我它的中心 (160, 230),这样我就可以在它的中心绘制...我是否需要手动考虑状态栏并每次从高度减去 20?或者是否有一些我忽略的 View 空间翻译?来自 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];

}

控制台:CenterX:160.000000,Y:250.000000

最佳答案

它实际上并不是“说谎”,而是在不同的坐标系中给你一个答案。

当您获取或设置 View 的中心时,它是相对于其坐标系进行计算的。。 self.view 的父级是应用程序的窗口,因此正如您猜测的那样,它的中心是 (160, 250)。但是myView的父级是self.view,它有自己的本地坐标系。在本例中,该坐标系比窗口的坐标系低 20 像素。

您想要的是在其自己的坐标系中找到self.myView的中心。有两种方法可以做到这一点。

1) 您可以根据 bounds 属性来计算它,该属性是一个 CGRect,指定 View 在其自己的坐标系中的边界:

myView.center = CGPointMake(self.view.bounds.size.width / 2,                            self.view.bounds.size.height / 2);

2) 或者您可以使用 UIViewconvertPoint:fromView: 方法将窗口坐标系中的坐标转换为 self.view< 的坐标系:

// Pass nil as the source view to convert from the window's coordinate systemmyView.center = [self.view convertPoint:self.view.center fromView:nil];

关于iphone - 我的 UIViewController 的中心属性是 "lying",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1071444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com