0

最終的にユーザーがタップできる 10 のゾーンを持つカスタム UIView を作成しました。ゾーンがタップされたときに、選択範囲を示すために低アルファ レイヤーをオーバーレイしたいと考えています。

残念ながら、セクションをタップすると、作成した CALayer がカスタム ビューの境界外に描画されます。私のx座標とy座標の両方がずれているようです。

カスタム ビュー内の drawRect メソッドは次のとおりです。

- (void)drawRect:(CGRect)dirtyRect
{
    if (touchPoint.x > 0 || touchPoint.y > 0){
        CGRect bounds = [self bounds];

        float widthOfArea = bounds.size.width / 10.0;

        float sectionNumber = round(touchPoint.x / widthOfArea);

        touchOverlayLayer = [[CALayer alloc] init];

        [touchOverlayLayer setBounds:CGRectMake(0.0, 0.0, widthOfArea, bounds.size.height)];

        [touchOverlayLayer setPosition:CGPointMake(widthOfArea * sectionNumber, self.bounds.origin.y)];

        UIColor *greyish = [UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:.5];

        CGColorRef cggreyish = [greyish CGColor];

        [touchOverlayLayer setBackgroundColor:cggreyish];

        [[self layer] addSublayer:touchOverlayLayer];
    }
}

そして、結果の表示が添付されます。レイヤーが正しい場所に描画されない

4

2 に答える 2

4

setPosition は、レイヤーのアンカー ポイントをその位置に配置します。レイヤーのデフォルトのアンカーポイントは中心です。これは、あなたが見ているものとかなりよく結びついています。

アンカーポイントを 0,0 に設定してから位置を設定すれば問題ありません。

アンカーポイントなどについて簡単に説明します。

少しトリッキーです。フレーム、境界、および位置はすべて結び付けられています。あなたの状況では、レイヤーのフレームを設定するだけで問題ありません.アンカーポイントは、通常、レイヤーを回転または変換するときに使用されます-それが変換の原点になります. アンカーポイントを変更するとレイヤーが移動しますが、位置を設定しているため、再び元に戻ります。ドキュメントはこれに関して少し弱いですが、ウェブ上にはたくさんの例があります。

アンカーポイントは、すべてが発生する場所になります。したがって、位置を設定すると、アンカーポイントがその位置になるようにレイヤーが移動します。レイヤーを回転すると、アンカーポイントなどを中心に回転します。

于 2012-06-01T05:49:28.680 に答える
0

この行だけを追加するだけです

touchOverlayLayer.anchorPoint=CGPointMake(0, 0);

デフォルトの anchorPoint は 0.5,0.5 で、レイヤーの中心にあることを意味します。

于 2012-06-01T06:01:58.527 に答える