- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 EAGLView,我希望将其转换为 UIImage。我可以使用此处发布的解决方案来做到这一点:
How to get UIImage from EAGLView?
但是,如果在创建 EAGLView 和 UIImage 之间经过了一小段时间,我只能完成此操作。
这段代码创建了一个 EAGLView,然后又创建了一个 UIImageView,但它不起作用:
EAGLView *EAGLphoto = [[EAGLView alloc] initWithImage:photo.workAreaImage];
[theWorkArea.photoArea1 addSubview:EAGLphoto];
//I put a glfinish() here but it didn't help
UIImageView *photoView = [[UIImageView alloc] initWithImage:[self glToUIImage]];
//glToUIImage is taken from the link above
[theWorkArea.photoArea2 addSubview:photoView];
我假设 UIImageView 尝试在 EAGLView 创建完成之前创建。我试图在两者之间放置一个 glfinish() 但它什么也没做。当我运行代码时,EAGLView 显示正常,但 UIImageView 显示为黑色。
但是,上述代码的修改版本有效:
EAGLView *EAGLphoto = [[EAGLView alloc] initWithImage:photo.workAreaImage];
[theWorkArea.photoArea1 addSubview:EAGLphoto];
[self performSelector:@selector(getUIImage) withObject:nil afterDelay:0.1];
- (void)getUIImage {
UIImageView *photoView = [[UIImageView alloc] initWithImage:[self glToUIImage]];
//glToUIImage is taken from the link above
[theWorkArea.photoArea2 addSubview:photoView];
}
我是否错误地使用了 glfinish()?有比我的 hack 更好的方法吗?
最佳答案
通常,当您对 UIKit 对象进行可见更改而不是立即更新时,它们只是标记自己以在将来进行这些更改,然后在您下次放弃主线程时(通过返回到运行循环)。这不是实现中的错误或失败,实际上通常是您隐含的期望,这是您可以编写如下代码的原因:
view.frame = someNewFrame;
view.someOtherProperty = someOtherValue;
不用担心 View 会在采用其他更改之前明显地采用新框架。通常,您希望对 View 所做的事情看起来是原子的。
有时您会遇到这样的情况,就像您在这里遇到的那样,您已经请求的更改尚未生效的事实会暴露出来。 frame
和 someOtherProperty
将在上面的示例中返回它们的新值,因此您不必关心更改是否立即生效,但基于您对 performSelector:withObject:afterDelay:
您可能偶然发现了一种情况,即更改不会假装立即发生。
EAGLView
很难诊断,因为它并不是真正的 UIKit 功能。它所基于的 CAEAGLLayer
是,但 EAGLView
只是 Apple 在各种示例项目中为基于 CAEAGLLayer
构建的自定义 UIView 子类采用的名称.他们在他们的示例中对 EAGLView
的接口(interface)或实现并不一致,但我猜测它可能正在创建 OpenGL 帧缓冲区对象(即 OpenGL 使用的对象)存储与像素相关的数字,允许 glReadPixels
工作)只有在被要求对自己进行布局时才会进行布局,直到 UIKit 要求它这样做时它才会自行布局。直到你退出运行循环。
可以通过检查您拥有的 EAGLView
的代码来确认该诊断。如果由于 layoutSubviews
、drawRect
或其他一些不是由相关的 init
直接调用然后证明这一点。
假设诊断是正确的,您可以调整 EAGLView
,但我认为最好的解决方案可能就是坚持使用 performSelector:withObject:afterDelay:0
。这不是竞争条件,因此该解决方案一点也不古怪或不可靠,它只是一种稍微迂回的说法“让 UIKit catch 所有这些指令,因为我知道这会让 EAGLView进入有意义的状态,然后继续我的事情”。
关于iphone - EAGLView 到 UIImage 的时序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7047639/
当我收到内存警告级别 1 时,我的 EAGLView 开始吐出一行 openGL 错误(502 和 506),并且应用程序没有崩溃,但 EAGLView 变得无响应。由于 Cocos2d Direct
...沮丧。我希望我的游戏仅在横向模式下运行。我已将适当的键/值添加到 Info.plist 文件中,以强制设备方向在启动时正确。 我现在正在尝试旋转 OpenGL 坐标空间以匹配设备的坐标空间。我正
重新启动我的游戏时,它崩溃并显示内存不足警告。我正在寻找一种关闭 EAGLView 并停止所有进程的方法。我不确定要向您展示什么,所以如果需要,请询问更多信息。 我有一个带有 mainGameLoop
我在使用 Apple 的 EAGLView 和 Texture2D 时遇到了一些问题。如果我创建一个 EAGLView 实例并绘制一些纹理,效果会很好。但是,每当我创建 EAGLView 的第二个实例
我正在尝试将我的 CCScene 类(class)附加到我的 EAGLView。所以我的 EAGLView 是 1 类中的 IBOutlet。我连接它并设置和获取它。然后在我的 Class 1 的 V
我有一个 UITableView,每个单元格内有 3 个 EAGLView,用户可以在其中绘制一些东西(在 apple GLPaint 之后,我只是使用该示例中的 PaintingView 类) 我试
我有一个 EAGLView,我希望将其转换为 UIImage。我可以使用此处发布的解决方案来做到这一点: How to get UIImage from EAGLView? 但是,如果在创建 EAGL
我有一个在 iPad 上运行的应用程序,它使用大量纹理,渲染到一个 EAGLView 中。现在我需要第二个 EAGLView,与第一个共享纹理。 通过修复 Apple 代码中的一些设计错误(例如,默认
我有一个显示 OpenGL 3D 模型的 EAGLView 和一个显示图像的 UIImageView。 我想要的是在具有透明背景的 UIImageView 上方显示 EAGLView。 有什么方法可以
我有一个 EAGLView(取自 Apple 的示例),我可以使用以下代码将其成功转换为 UIImage: - (UIImage *)glToUIImage:(CGSize)size { NSInte
我见过 EAGLView 和 GLKView 都用在 iOS 应用程序中。它们有什么区别? 最佳答案 这两个类都与 OpenGL ES 相关,但实际上只有一个由 Apple 作为 iOS SDK 的一
我在 EAGLView 层上渲染了一个 opengl 场景,并在 UIView 上渲染了一些其他元素(圆圈等)(它是 EAGLView 的同级,位于其上方)。是否可以在两层之间混合颜色?我想做一些差异
我有一个 EAGLView,我正在动画中调整其大小,动画由调用绘图函数的 NSTimer 驱动。当我调整 EAGLView 的大小时,我需要调整 View 的投影以保持内容的纵横比。绘制函数如下所示:
我正在制作 OpenGL 游戏并希望同时支持纵向和横向。我编写了所有必要的代码来支持自动旋转,并希望通过以下方式通知我的游戏有关视口(viewport)大小的更改 [[NSNotificationCe
是否可以在EAGLView中使用UIKit类? 例如,是否可以在 EAGLView 中使用 UIScrollView,或者您是否需要重新实现某些内容? 最佳答案 据我所知 EAGLView 是一个 U
在我的 ios 应用程序中,我正在尝试录制 EAGLView 内容的视频(没有摄像头参与)。我录制视频没有问题。录制后,我必须向视频添加一些音轨,然后必须将此视频分享到 Youtube 和 faceb
我必须在我的 iOS 应用程序中的一些其他 View 之上覆盖一个(大部分)透明的 OpenGL View ,但是在我的 iPod touch(第一代,尽管是 iPhone OS 3.1)上进行的测试
我有一个 EAGLView,它有一个 EAGLLayer 作为支持层。我的应用程序基于 UIKit,但我想全屏显示基于 OpenGL 的图表。删除底层 View 会很痛苦,我只想在其他任何内容之上显示
试图获得 Cocos2D和 openFrameworks在 iOS 上一起玩得很好。两者都想使用 GL/EAGLview,当然他们不能同时使用 glView = [[EAGLView alloc] i
我已经实现了GPUImage framework在我的 cocos2d 项目中,GPUImage 框架是一个 BSD 许可的 iOS 库,可让您将 GPU 加速滤镜和其他效果应用于图像、实时摄像机视频
我是一名优秀的程序员,十分优秀!