Nano Hash - криптовалюты, майнинг, программирование

Проблемы CALayer при загрузке изображения из UIImagePicker

У меня есть UIViewController с UIImageView (imageView), и я определяю несколько слоев, которые будут вложены в изображение, как показано ниже в viewDidLoad:

//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, и я ожидаю добавить различные изображения в качестве подслоев к держателюLayer, а затем манипулировать им. Тем не менее, вызов

  [holderLayer addSublayer:newImgView.layer];

не работает; imageView остается пустым. Тем не менее, вызов

[self.imageView.layer addSublayer:newImgView.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;
08.05.2013
  • Я задал тем, что думал, что непрозрачность загораживает изображение - но вы правы! Спасибо! 08.05.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..