0

Master-Details プロジェクトをセットアップして XCode で実行してもまったく問題なく、すべて正常に動作します。ただし、NavigationBar の右上隅と左上隅を丸くしようとすると、非常に奇妙な効果があります。基本的に、詳細ビューの「戻る」左ボタンの「タッチ」応答を相殺します。

ボタンは引き続き機能しますが、iPhone は、ボタン自体ではなく、NavigationBar のすぐ下をクリックしたときにのみユーザーのタッチを検出できるようです。

私が持っているコードは次のとおりです。

// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    UIColor *color = [UIColor darkGrayColor];
    UIImage *img = [UIImage imageNamed:@"nav-bar"];
    [img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
    self.tintColor = color;

    // Create mask to round corners
    CGRect bounds = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:bounds byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerTopRight) cornerRadii:CGSizeMake(10.0, 10.0)];

    CAShapeLayer *maskLayer = [CAShapeLayer layer];
    maskLayer.frame = bounds;
    maskLayer.path = maskPath.CGPath;

    // Apply mask to navigation bar
    [self.layer addSublayer:maskLayer];
    self.layer.mask = maskLayer;

    // Apply logo to navigation bar
    UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"logo"]];
    self.topItem.titleView = imageView;
}

これは私が意味することのスクリーンショットです。ボタンは、矢印が指している場所に触れたときにのみ応答します。

タッチポイント

- - アップデート - -

いくつかのテストの後、問題は「self.layer.mask = maskLayer」行にあることがわかりました。コードをリファクタリングし、ストーリー ボードではなく xib ファイルのみを使用する別のプロジェクトでテストしましたが、問題はありませんが、現在のプロジェクトではまだ機能していません。

CGRect bounds = CGRectMake(0, 0, navigationController.navigationBar.bounds.size.width,
                                   navigationController.navigationBar.bounds.size.height);
        UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:bounds byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerTopRight) cornerRadii:CGSizeMake(10.0, 10.0)];

        CAShapeLayer *maskLayer = [CAShapeLayer layer];
        maskLayer.frame = bounds;
        maskLayer.path = maskPath.CGPath;

        // Apply mask to navigation bar
        //navigationController.navigationBar.layer.mask = maskLayer;
        [navigationController.navigationBar.layer addSublayer:maskLayer];
        navigationController.navigationBar.layer.mask = maskLayer;
4

1 に答える 1

0

self.boundsの代わりに使用しself.frameます。おそらく、自分の親ビューに対してではなく、自分の座標系に対して相対的に描画する必要があります。

于 2012-08-28T06:05:09.347 に答える