2

CAShapeLayers次の方法では、を使用してビューレイヤープロパティにアタッチされている束を単純に拡大していますCATransform3DMakeScale。シェイプレイヤーを正しく拡大することはできますが、ビューフレームを拡大して、シェイプレイヤーによって生成されたグラフィックに適切に合わせるのに苦労しています。すべてが同じサイズです。つまり、ビューフレームはすべてのシェイプレイヤーと同じサイズです。

誰かがこれを修正する方法について何か提案がありますか?ビューの変換プロパティとビューレイヤーの変換プロパティを変更してみました。ここで何が欠けているのかわかりません。

- (void) setSize:(CGSize)size
{
    CATransform3D transform = CATransform3DMakeScale(size.width / (self.graphic.initialSize.width), size.height / (self.graphic.initialSize.height), 1);
    self.layer.sublayerTransform = transform;
    self.frame = CGRectMake(0, 0, size.width, size.height);
    self.graphic.size = CGSizeMake(size.width, size.height);
}

また、参考のために、ビューレイヤーを設定する方法を次に示します。

- (id)initWithGraphic:(Graphic*)graphic
{
    self = [super initWithFrame:CGRectZero];
    if (self) 
    {
        self.backgroundColor = [UIColor clearColor];

        _graphic = [graphic retain];

        self.frame = CGRectMake(0,0, _graphic.initialSize.width, _graphic.initialSize.height);
        self.layer.shouldRasterize = YES;

        for (int i = 0; i < [_graphic.shapeLayers count]; i++)
        {
            [self.layer addSublayer:[_graphic.shapeLayers objectAtIndex:i]];
        }
    }
    return self;
}

シェイプレイヤーの1つを設定する方法は次のとおりです。

CAShapeLayer *outlineShapeLayer = [[CAShapeLayer alloc] init];
outlineShapeLayer.anchorPoint = CGPointMake(0, 0);
outlineShapeLayer.fillColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1].CGColor;
outlineShapeLayer.bounds = shapeLayerFrame;
outlineShapeLayer.mutablePath = mutablePath;
4

1 に答える 1

1

ビューレイヤーにもアンカーポイントと位置がCAShapeLayersと一致するように設定されるように作成する必要があり、それで機能しました。

self.layer.anchorPoint = CGPointMake(0, 0);
self.layer.position = CGPointMake(0, 0);
于 2012-12-25T19:14:37.763 に答える