Установите CALayer как рассеянное содержимое SCNMaterial

Последние пару дней я искал по всему интернету безрезультатно. К сожалению, документация Apple об этой конкретной проблеме расплывчата, и пример кода недоступен (по крайней мере, это то, что я выяснил). Какую проблему вы можете задать ...

Я пытаюсь установить слой uiview в качестве содержимого материала, который используется для визуализации экрана модели iPhone (да, триппи: P). UV-отображение экрана iPhone установлено в диапазоне от 0 до 1, чтобы не возникало проблем при отображении текстуры / слоя на тексели.

Таким образом, вместо того, чтобы этот слой отображался на iPhone как на левом изображении, вместо этого я отображаю его на iPhone как правое изображение

Правильный рендер Неверный рендер

Также обратите внимание, что когда я устанавливаю точку останова и отлаживаю фактический узел iPhone и просматриваю его в Xcode, отображается совершенно другой рендер, и слой становится наполовину фиксированным, когда я продолжаю выполнение:

Теперь тогда ... КАК мне исправить эту проблему ??? Я пытался поиграть с матрицей преобразования содержимого diffuse, но ничего не исправлено. Я также попытался изменить размер UIView до 256x256 (так как UV кажется 256x256, как показано в blender - пакете трехмерного моделирования), но это ничего не исправляет.

Вот код для слоя:

UIView *screen = [[UIView alloc] initWithFrame:self.view.bounds];
screen.backgroundColor = [UIColor redColor];

UIView *temp = [[UIView alloc] initWithFrame:CGRectMake(0, 0, screen.bounds.size.width, 60)];
temp.backgroundColor = [UIColor colorWithRed:0 green:(112.f/255.f) blue:(235.f/255.f) alpha:1];

UILabel *label = [[UILabel alloc] initWithFrame:CGRectInset(temp.bounds, 40, 0)];
label.frame = CGRectOffset(label.frame, 40, 0);
label.textColor = [UIColor colorWithRed:0 green:(48.f/255.f) blue:(84.f/255.f) alpha:1];
label.text = @"Select Track";
label.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:30];
label.minimumScaleFactor = 0.001;
label.adjustsFontSizeToFitWidth = YES;
label.lineBreakMode = NSLineBreakByClipping;
[temp addSubview:label];

UIView *separator = [[UIView alloc] initWithFrame:CGRectMake(0, temp.bounds.size.height - 2, temp.bounds.size.width, 2)];
separator.backgroundColor = [UIColor colorWithRed:0 green:(48.f/255.f) blue:(84.f/255.f) alpha:1];
[temp addSubview:separator];
[screen addSubview:temp];
screen.layer.contentsGravity = kCAGravityCenter;

редактировать
Что еще более странно, так это то, что если я получу UIImage вида, используя:

- (UIImage *) imageWithView:(UIView *)view
{
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];

    UIImage * img = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return img;
}

и использовать это как содержимое diffuse ... все отлично работает ?! Это действительно странно и неприятно, поскольку размер изображения точно такой же, как у uiview ...

Редактировать 2

Я просто использовал изображение вида в качестве текстуры, которая делает вещи намного более статичными, чем мне нужно. Я не буду устанавливать это как ответ, потому что я все еще буду ждать правильного решения этой проблемы, даже если это будет продолжаться долгое время. Итак, если у вас есть ответ, и эта тема была открыта в течение длительного времени, пожалуйста, поднимите его, если можете. Документация по этому разделу просто плохая.

Ответы на вопрос(2)

Ваш ответ на вопрос