- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
这几天我在网上到处找,没找到。不幸的是,有关此特定问题的苹果文档含糊不清,并且没有可用的示例代码(至少那是我发现的)。您可能会问什么问题...
我正在尝试将 uiview 的层设置为用于渲染 iPhone 模型屏幕的 Material 的内容(是的,trippy :P )。 iPhone 屏幕的 UV 映射设置为 0 到 1,因此将纹理/层映射到纹素上不会出现问题。
因此,我没有像左图那样在 iPhone 上渲染这个层,而是像右图那样在 iPhone 上渲染它
另请注意,当我设置断点并调试实际的 iPhone 节点并在 Xcode 中查看它时,会显示完全不同的渲染,并且当我继续执行时该层会半固定:
那么……我该如何解决这个问题???我试过使用漫反射的内容变换矩阵,但没有任何问题得到解决。我还尝试将 UIView 的大小调整为 256x256(因为 UV 似乎是 256x256,如 blender - 3d 建模包中所示),但这并没有解决任何问题。
这是层的代码:
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;
编辑
更奇怪的是,如果我使用以下方法捕获 View 的 UIImage:
- (UIImage *) imageWithView:(UIView *)view
{
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
并将其用作漫反射的内容...一切都完美无缺?!这真的很奇怪和令人沮丧,因为图像的大小与 uiview 的大小完全相同......
编辑2
我最终只使用 View 的图像作为纹理,这使得事情比我需要的静态得多。我不会将此设置为答案,因为我仍然会等待这个问题的正确修复,即使它需要很长时间。所以,如果你有答案,而且这个话题已经开了很久,可以的话请顶一下。这部分的文档太差了。
最佳答案
旧线程上的新帖子,但在这个时代,可以将 UIView 本身设置为 SCNMaterialProperty (diffuse) contents
。 Apple 的 SceneKit 工程师直接传达了支持此功能的意图,但文档尚未更新以反射(reflect)它。
回到原来的帖子,不要将 UIView.layer 设置为 Material 属性内容;而是将内容设置为 UIView 本身。
[更新:根据下面 Lance 的评论,对观点的支持可能会越来越差,而不是越来越好。]
关于ios - 将 CALayer 设置为 SCNMaterial 的漫反射内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36190789/
我一直在阅读和试用 Peter Shirley 的“一个周末的光线追踪”。在漫反射 Material 部分之前,一切都进行得很顺利。基本上,我的算法似乎只是从特定角度转换阴影,而不是漫反射 Mater
我正在 Swift 中使用 RealityKit 加载 USDZ 模型。模型加载良好,具有纹理。 但是,我无法更改 Material 的漫反射属性, Material 总是返回 AnyMaterial
我正在尝试在 iOS 上的 SceneKit 中实现网格的透明度。我对文档感到困惑,因为似乎有多种方法可以使网格透明: 通过 SCNMaterial.(diffuse|emission|ambient
我是一名优秀的程序员,十分优秀!