0

我试图在屏幕中间水平绘制一些paintcode图形代码时有点混乱。

我真的不确定比例或横向是否会影响这一点。

我已经在 viewDidLoad 中创建了一个 UIView 子类和 addSubview ,就像这样......

MenuTitleView *fancyView = [[MenuTitleView alloc] initWithFrame:self.view.bounds];
[[self view] addSubview:fancyView];

而不是 PaintCode 给我的尺寸...

CGRect textRect = CGRectMake(0, 0, 418, 129);

我正在尝试确定屏幕/视图宽度和画布宽度的大小。

我尝试了各种各样的事情都没有成功。

CGRect screenRect = [[UIScreen mainScreen] applicationFrame];
CGFloat w = screenRect.size.width;
CGFloat width = 500;
CGFloat height = 200;
CGFloat x = (w - width) * 0.5f;
CGFloat y = 20;
CGRect textRect = CGRectMake(x, y, width, height);
4

2 回答 2

0

比例不是问题,因为 Quartz 和 UIKit 现在以“点”而不是像素为单位工作,所以这已经被考虑在内。但是方向不是,[UIScreen mainScreen] 将为 applicationFrame 或 bounds 等返回相同的矩形,它忽略了方向。

我喜欢将解决方案放在 UIView 或 UIViewController 的类别中,因为您会大量重复使用它。像这样的东西......

    -(CGRect )workingCanvas{

    CGRect screenRect = [UIScreen mainScreen].bounds;
    BOOL landscape = UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]);

    CGRect result = CGRectZero;

    CGFloat lesserDimension = (screenRect.size.width < screenRect.size.height) ? screenRect.size.width : screenRect.size.height;

    CGFloat greaterDimension = (screenRect.size.width > screenRect.size.height) ? screenRect.size.width : screenRect.size.height;

    result.size.width = (landscape) ? greaterDimension : lesserDimension;
    result.size.height = (landscape) ? lesserDimension : greaterDimension;

    if ([[UIApplication sharedApplication]isStatusBarVisible]){

    result.size.height -= [[UIApplication sharedApplication]statusBarFrame].size.height;
    }

return result;

}
于 2014-02-21T00:48:06.870 回答
-1

如果你想把你的视图放在屏幕中间试试这个

    CGRect screenRect = [[UIScreen mainScreen] applicationFrame];
    CGFloat width = 500;
    CGFloat height = 200;
    CGFloat x = CGRectGetMidX(screenRect);
    CGFloat y = 20;
    CGRect textRect = CGRectMake(x, y, width, height);

已经测试正在工作

祝你好运!!

于 2014-02-20T22:25:46.320 回答