0

私はUIImageView(imageView)を持つUIViewControllerを持っており、viewDidLoadで次のようにimageviewにネストされるいくつかのレイヤーを定義しています:

//container layer - the very top layer
CALayer *containerLayer = [CALayer layer];
containerLayer.opacity = 0;
containerLayer.bounds = [self.imageView.layer frame];

// Holder Layer
CALayer *holderLayer = [CALayer layer];
holderLayer.opacity = 0;
holderLayer.bounds = self.imageView.bounds;

// Hierarchy layers
[containerLayer setValue:holderLayer forKey:@"__holderLayer"];
[containerLayer addSublayer:holderLayer];

[self.imageView.layer addSublayer:containerLayer];

UIImagePicker から画像をロードするときに機能する次のコードがあります。

    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
    UIImageView *newImgView = [[UIImageView alloc] initWithFrame:self.imageView.frame];

    CGRect frame = self.imageView.frame;

    newImgView.image = image;
    frame.origin = CGPointMake(0, 0);
    newImgView.layer.frame = frame;
    newImgView.layer.opacity = .9;
    newImgView.layer.contentsGravity = kCAGravityResizeAspectFill;

    CALayer * containerLayer = self.imageView.layer.sublayers[0];

    if (containerLayer != nil)
    {

        [containerLayer setValue:newImgView.layer forKey:@"__imageLayer"];


        CALayer * holderLayer = [containerLayer valueForKey:@"__holderLayer"];
        if (holderLayer != nil)
        {
            //!!!!!line below doesn't work!!!
            //[holderLayer addSublayer:newImgView.layer];

            //line below works!
            [self.imageView.layer addSublayer:newImgView.layer];
        }   
    }
    [self.imageView setNeedsDisplay];
    [self checkAndPrintLayers];

したがって、最初のネストされたレイヤーはcontainerLayer、次にholderLayerであり、さまざまな画像をサブレイヤーとしてholderLayerに追加してから操作することを期待しています。ただし、呼び出し

  [holderLayer addSublayer:newImgView.layer];

動作しません。imageView は空白のままです。ただし、呼び出し

[self.imageView.layer addSublayer:newImgView.layer];

最上位レイヤーにサブレイヤーを追加すると、うまく機能します。ここで明らかな何かが欠けていますか?どんな提案も大好きです。ありがとう。

4

1 に答える 1

0

なぜなら

holderLayer と containerLayer は透明 です (holderLayer.opacity = 0 / containerLayer.opacity = 0)

成功する、

 //container layer - the very top layer
CALayer *containerLayer = [CALayer layer];
containerLayer.opacity = 1.0;
containerLayer.bounds = [self.imageView.layer frame];

// Holder Layer
CALayer *holderLayer = [CALayer layer];
holderLayer.opacity = 1.0;
holderLayer.bounds = self.imageView.bounds;
于 2013-05-08T19:26:01.073 に答える