0

画面の中央に水平にペイントコード グラフィックス コードを描画しようとして、少し混乱しています。

縮尺や横向きがこれに影響するかどうかはよくわかりません。

UIView サブクラスを作成し、viewDidLoad に 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 や境界などに対して同じ rect を返します。向きは無視されます。

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 に答える