2

アプリの端の周りに(アプリ全体で)小さな丸い角を付けたいので、これを行うのに最適な場所は、クラスUIWindowで作成されたメインのレイヤーであると考えました。AppDelegateこれが私のコードです...

[self.window.layer setCornerRadius:30.0f];
[self.window.layer setMasksToBounds:YES];

これにより、ウィンドウの下部と上部の角がわずかに丸くなります。ただし、ウィンドウは画面のフルサイズ (画面からステータスバーを引いたものではない) であるため、このような結果になります.. http://tfld.me/image/441U0j3w3X3N

アプリ内のすべてのナビゲーション コントローラー/ビューのすべてのレイヤーに cornerRadius/masksToBounds オプションを追加したり、背景画像を追加したりしたくありません (これは将来の証明ではないため)。

また、Windows rootViewController でこれらのオプションを設定しようとしましたが、うまくいきませんでした - http://tfld.me/image/0c1m2w36402K

どんな提案でも大歓迎です:)

4

3 に答える 3

2

ナビゲーション バーを湾曲させたい場合は、適切な画像を使用できます。そうでない場合は、以下のコードが必要に応じて機能するはずです。

    self.window = [[[UIWindow alloc] init] autorelease];
    //shift the window frame by 20 px so that it goes below status bar
    CGRect sampleRect = [[UIScreen mainScreen] bounds];
    sampleRect.origin.y += 20.0;
    sampleRect.size.height -= 20.0;
    self.window.frame = sampleRect;

    UIViewController *vc = [[UIViewController alloc] init];
    vc.view.frame = [[UIScreen mainScreen] bounds];

    UINavigationController *mRootController = [[UINavigationController alloc] initWithRootViewController:vc];
    CGRect navFrame = mRootController.view.frame;
    navFrame.origin.y -= 20.0; //Shift the navigation frame up by 20 px
    mRootController.view.frame = navFrame;

    [self.window addSubview:mRootController.view];
    [self.window.layer setCornerRadius:20.0f];
    [self.window.layer setMasksToBounds:YES];
于 2012-09-10T09:53:28.120 に答える
0

そのために、透明な円の 1/4 (半径はウィンドウの新しい半径になります) と角に向かって黒い小さな png ファイルを使用しました (デザイナーが画像を提供してくれました。それを行う必要がある場合があります)。あなた自身)。imageViewこの png を使用して4 つの を作成し、それに応じて回転させ、サブビューとして に追加しましたnavigationController

次のメソッドをあなたに入れ、appDelegate内部で呼び出しますapplication:didFinishLaunchingWithOptions:メソッドを初期化した後navigationController

-(void) insertCornerRadiiOnNavigationController : (UINavigationController *) navController{

CGFloat cornerRadius = 7;

UIImageView *corner1 = [[UIImageView alloc] initWithFrame:CGRectMake(0, 20, cornerRadius, cornerRadius)];
UIImageView *corner2 = [[UIImageView alloc] initWithFrame:CGRectMake([_window bounds].size.width - cornerRadius, 20, cornerRadius, cornerRadius)];
UIImageView *corner3 = [[UIImageView alloc] initWithFrame:CGRectMake(0, [_window bounds].size.height - cornerRadius, cornerRadius, cornerRadius)];
UIImageView *corner4 = [[UIImageView alloc] initWithFrame:CGRectMake([_window bounds].size.width - cornerRadius, [_window bounds].size.height - cornerRadius, cornerRadius, cornerRadius)];

corner2.transform = CGAffineTransformMakeRotation (M_PI_2);
corner3.transform = CGAffineTransformMakeRotation (3 * M_PI_2);
corner4.transform = CGAffineTransformMakeRotation (M_PI);

[corner1 setImage:[UIImage imageNamed:@"corner.png"]];
[corner2 setImage:[UIImage imageNamed:@"corner.png"]];
[corner3 setImage:[UIImage imageNamed:@"corner.png"]];
[corner4 setImage:[UIImage imageNamed:@"corner.png"]];

[navController.navigationBar addSubview:corner1];
[navController.navigationBar addSubview:corner2];
[navController.view addSubview:corner3];
[navController.view addSubview:corner4];

[corner1 release];
[corner2 release];
[corner3 release];
[corner4 release];
}

何らかの理由でそれらをUIWindow直接追加できなかったため、imageViews表示されませんでした。

于 2013-03-26T17:22:20.620 に答える