1

スプリットビューベースのiPadアプリでは、ナビゲーションバーとツールバーにカスタム背景画像を使用しています。 IはUINavigationBar及び/又はUIToolbarをサブクラスとdrawRect:に私は(背景画像が長方形である)を有する:カスタム背景画像を使用してUINavigationBarとUIToolbarから丸みのあるコーナーを削除するにはどうすればよいですか?

- (void)drawRect:(CGRect)rect { 
    CGContextRef c = UIGraphicsGetCurrentContext(); 
    UIImage *image = [UIImage imageNamed:@"background-image"];  

    CGContextDrawImage(c, rect, image.CGImage); 
} 

結果は私は丸い角を削除する Rounded corners あります。で説明

  1. [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];、上記と同じ結果、私のサブクラスで
  2. clipsToBounds = YES;
  3. cornerRadius=0.0
  4. iPhoneOS SDK - Remove Corner Rounding from views (iPad problem)

問題:私はすでに試した何

4.私はまったく同じものです。残念ながら、その質問に記載されている解決策は私のためには機能しません。 viewWillAppearから呼び出されたとき、縦向きで何らかの理由で自分のnavigationItemが表示されなくなります。ランドスケープのdidRotateFromInterfaceOrientation:から呼び出されると、角が丸くなりますが、同時にすべてのユーザー対話が無効になります。さらに、Portraitに戻って回転したとき、私の「マスター」ビュー(分割ビューの左側)は隠されていません。

私は受け入れ答えからコードを使用して得た出力は次のとおりです。

aView: <UIWindow: 0x5e18470; frame = (0 0; 768 1024); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x5e18280>> 
subview: <UILayoutContainerView: 0x6942000; frame = (20 0; 748 1024); transform = [0, -1, 1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x6946b30>> 
aView: <UILayoutContainerView: 0x6942000; frame = (20 0; 748 1024); transform = [0, -1, 1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x6946b30>> 
subview: <BackgroundImageView: 0xbbacf70; frame = (0 0; 768 1004); layer = <CALayer: 0xbbad020>> 
aView: <BackgroundImageView: 0xbbacf70; frame = (0 0; 768 1004); layer = <CALayer: 0xbbad020>> 
subview: <UILayoutContainerView: 0x69144e0; frame = (321 0; 703 748); clipsToBounds = YES; layer = <CALayer: 0x6946fe0>> 
aView: <UILayoutContainerView: 0x69144e0; frame = (321 0; 703 748); clipsToBounds = YES; layer = <CALayer: 0x6946fe0>> 
subview: <UILayoutContainerView: 0xbbabc40; frame = (0 0; 320 748); clipsToBounds = YES; layer = <CALayer: 0xbbabc90>> 
aView: <UILayoutContainerView: 0xbbabc40; frame = (0 0; 320 748); clipsToBounds = YES; layer = <CALayer: 0xbbabc90>> 
subview: <UIImageView: 0x5e178c0; frame = (321 0; 3 3); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xba60d10>> - (null) 
aView: <UIImageView: 0x5e178c0; frame = (321 0; 3 3); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xba60d10>> - (null) 
subview: <UIImageView: 0xba74010; frame = (317 0; 3 3); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xba62180>> - (null) 
aView: <UIImageView: 0xba74010; frame = (317 0; 3 3); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xba62180>> - (null) 
subview: <UIImageView: 0xbad0110; frame = (321 745; 3 3); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xba60da0>> - (null) 
aView: <UIImageView: 0xbad0110; frame = (321 745; 3 3); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xba60da0>> - (null) 
subview: <UIImageView: 0xba60e00; frame = (317 745; 3 3); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xba60e30>> - (null) 
aView: <UIImageView: 0xba60e00; frame = (317 745; 3 3); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xba60e30>> - (null) 

そしてかなり右に小さい、3x3pxがあり、コーナーでUIImageViewsを丸めました。

質問はです:どのように私はこれらの小さな丸いコーナーを取り除くことができますか?私のために働いた

+0

これで運がいいですか?この同じ問題を自分自身で現在実行しています。 – raidfive

+0

@raidfive私の答えを参照してください:) –

答えて

2

ソリューション:

- (void)hideSplitViewCorners { 
// Hide corners of splitview. 
NSMutableArray *views = [NSMutableArray array]; 
[views addObject:[self view]]; 

for (NSUInteger i = 0; i < views.count; ++i) { 
    UIView *view = [views objectAtIndex:i]; 
    [views addObjectsFromArray:view.subviews]; 

    if (view.frame.size.width == 3.0 && view.frame.size.height == 3.0) { 
     view.hidden = YES; 
    } 
    }  
} 

私はloadViewUISplitViewControllerの私のサブクラスのdidRotateFromInterfaceOrientation:でそれを呼び出します。 後者では[self performSelector:@selector(hideSplitViewCorners) withObject:NULL afterDelay:0];を使用する必要があることに注意してください。

基本的には、これらのコーナーの隠蔽は、の後にの画面に表示されていることを確認する必要があります。

関連する問題