0

このチュートリアルに従って描画アプリケーションを作成しようとしています: http://www.effectiveui.com/blog/2011/12/02/how-to-build-a-simple-painting-app-for-ios/、および次に、画面全体に描画するだけでなく、別の UIView 内にある UIView にのみ描画するようにしようとしました。(私が入れ子になった UIView と呼んでいるもの)

私のコードは現在 github にあります: https://github.com/sammy0025/SimplePaint

チュートリアルの元のコードを微調整したのは、一部のクラス プレフィックス名を変更し、ARC を有効にして解放を行わないようにし、ストーリーボードを使用し (チュートリアルの元のコードで問題なく動作します)、メイン ビュー コントローラーでこのコードを変更したことだけです。実装ファイル (SPViewController.m):

-(void)viewDidLoad
{
    [super viewDidLoad];
    nestedView.backgroundColor=[UIColor colorWithWhite:0 alpha:0]; //This is to make the nested view transparent
    SPView *paint = [[SPView alloc] initWithFrame:nestedView.bounds]; //original code is SPView *paint=[[SPView alloc] initWithFrame:self.view.bounds];
    [nestedView addSubview:paint]; //original code is [self.view addSubview:paint];
}

私の質問は、ネストされた UIView 内にのみ描画するようにするにはどうすればよいですか?

4

2 に答える 2

0

ネストされたビュー内で SPView を使用するのではなく、必要に応じて SPView のフレームを変更することを検討してください。これにより、特定の四角形内でのみ描画を許可するという問題が解決するはずです。ストーリーボードの構成が原因で問題が発生していると思います。ストーリーボードについてはよくわかりませんが、ストーリーボードのビューを破棄し、viewDidAppear で独自のビューを構築することで、これをプログラムで機能させることができました。

-(void)viewDidAppear:(BOOL)animated{

    UIView *newView = [[UIView alloc] initWithFrame:self.view.bounds];
    newView.backgroundColor = [UIColor greenColor];

    SPView *newPaint = [[SPView alloc] initWithFrame:CGRectInset(self.view.bounds, 40,40)];

    [newView addSubview:newPaint];

    self.view = newView;
}

再構築されたビューのスクリーンショット

于 2013-05-25T17:01:10.450 に答える
0

サブビューにクリッピングを追加します。たとえばself.bounds、ビューの全領域をカバーします。

UIBezierPath *p = [UIBezierPath bezierPathWithRect:self.bounds];
[p addClip];

ビューのクリッピングは、最初は境界に基づいている必要があり、新しいクリッピングを追加することで縮小できると思います。しかし、iOS と OS X では違いがあるかもしれません。

于 2013-05-25T15:37:35.810 に答える