23

私はある時点から、OS X の場合、そして iOS の場合は常にそうであると考えていましたが、コンテンツはビューの境界の外に表示される可能性がありますか? (UIView の場合) しかし、まったく新しいシングル ビュー アプリを作成し、UIView をサブクラス化する MyView クラスを作成し、その drawRect を実装するとします。

- (void)drawRect:(CGRect)rect
{
    // Drawing code
    UIBezierPath *path = [UIBezierPath bezierPathWithRect:
                                           CGRectMake(-20, -20, 600, 600)];
    [[UIColor greenColor] set];
    [path fill];

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, [[UIColor blueColor] CGColor]);
    CGContextFillRect(context, CGRectMake(-20, -20, 600, 600));
}

UI と CG の両方を使用して、一方が機能し、もう一方が機能しない場合に備えて、それぞれ四角形を描画します。ビューは次のように追加されviewDidAppearます。

- (void)viewDidAppear:(BOOL)animated {
    MyView *myView = [[MyView alloc] initWithFrame:CGRectMake(20, 20, 260, 260)];
    [self.view addSubview:myView];
}

しかし、何があっても、色付きのボックスは(20, 20, 260, 260)領域を超えることはありません。ビューの境界の外に自由に追加して表示できるのは CALayer だけであるというのは本当ですか? (20, 20, 260, 260)そもそもグラフィック コンテキストがこれに限定されているためでしょうか。もしそうなら、drawRect上、下、左、右の 4 つの方向すべてで、ビューの境界の外にコンテンツを表示する方法はありますか?

4

2 に答える 2

30

あなたの問題は、「drawRect」が、描画しているビューに自動的にクリップされることです。

ビュー自体で描画を行う代わりに、最初のビューの境界の外側にある最初のビューに 2 番目の (サブ) ビューを追加します。これにより、最初のビューの配置に依存するが、最初のビューの境界の外にある描画を行うことができます。

お役に立てれば。

于 2012-09-23T11:18:49.907 に答える
-3

scrollView を追加したビューでこれを試してください。

self.scrollView.backgroundColor = [UIColor darkGrayColor];
self.scrollView.layer.cornerRadius = 10.0f;
self.scrollView.layer.masksToBounds = YES;

必要に応じて、角が丸い灰色のスクロールビューが表示されます。

QuartzCore FrameWork をインポートする必要があることを忘れないでください

于 2012-09-23T09:38:44.613 に答える