【问题标题】:CALayer Troubles when loading an image from a UIImagePicker从 UIImagePicker 加载图像时的 CALayer 问题
【发布时间】:2023-04-09 08:15:01
【问题描述】:

我有一个带有 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];

在顶层添加一个子层只是花花公子。 我在这里遗漏了一些明显的东西吗?希望有任何建议。 谢谢。

【问题讨论】:

    标签: ios xcode4 uiimageview calayer layer


    【解决方案1】:

    因为

    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;
    

    【讨论】:

    • 我设置了那些认为不透明度阻挡图像的人 - 但你是对的!谢谢!
    猜你喜欢
    • 2011-12-22
    • 1970-01-01
    • 2016-08-06
    • 2011-09-13
    • 2015-02-19
    • 1970-01-01
    • 2023-03-30
    • 2016-06-13
    • 1970-01-01
    相关资源
    最近更新 更多