- 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/
我有一个应用程序,它将在 SQLDatabase 中保存一组图像,然后用户将拍摄一张照片,我希望能够将它与数据库中的图像相匹配。 我不知道从哪里开始,有人可以帮忙吗?指出我正确的方向? 谢谢 最佳答案
在我的项目中,我有两个 UIViewController。在我的第一个 ViewController 上,我有一个 UIImageView,并且有一个来自 url 的图像。在第二个 ViewContr
如何从上下文创建 UIImage 以便我可以返回它?我只希望它有透明像素。我有一种不同的方法,可以将较小的 UIImage 添加到较大的 UIImage,但我需要从头开始。 + (UIImage *)
我想知道如何将 UIImage 居中到 UIButton。我正在使用 UIButton 的 setImage 方法来放置 UIImage .. 最佳答案 您可以使用 contentMode 属性: b
我从相机获取 UIimages 并将它们分配给要显示的 UIImageViews。当我这样做时,相机会给我一个 1200 x 1600 像素的图像,然后我将其分配给我的应用程序中的 UIImageVi
Swift 4 有 Codable这太棒了。但是UIImage默认情况下不符合它。我们怎么能做到这一点? 我试过 singleValueContainer和 unkeyedContainer exte
我的代码在普通设备上运行良好,但在视网膜设备上创建模糊图像。 有人知道我的问题的解决方案吗? + (UIImage *) imageWithView:(UIView *)view { UIGr
我总是得到:CGImageCreate:无效的图像大小:0 x 0。 ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; // En
我有一张图片,想创建一张如下所示的黑色图片: 我有一个 View 和一个 ImageView ,因为它是 subview 。 ImageView 的 alpha 为 0.5,其色调颜色为黑色。 Vie
几天来我一直被困在一些必须非常简单的事情上,我已经搜索了几天,但我似乎无法找到正确的代码来工作。 我有两张图片,一张是背景图片,另一张会遮盖第一张图片。我可以用手势移动蒙版图像。我可以缩放、旋转和移动
我正在尝试拍摄类似背景透明的三角形图像,并根据用户偏好在三角形部分或背景部分上应用圆点图像。例如,我如何将圆点应用于三角形部分,然后将条纹应用于图像的透明部分。有针对这种事情的屏蔽技术吗? 非常感谢,
给出下面的图片,百分比为 25%。如何生成另一个代表给定图像径向部分 25% 的 UIImage?非常感谢任何帮助。 输入 输出 - (UIImage *)radialPortion:(float)p
这是我的代码: - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView { // at this point the
我正在使用扩展程序对我的图像进行像素化处理,如下所示: func pixellated(scale: Int = 8) -> UIImage? { guard let ciImage = CI
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 6 年前。 Improve t
我有两个 UIImage 实例。我怎样才能创建第三个 UIImage 这只是拼接在一起的两个原始图像?我想要第一张图片在顶部,第二张图片在底部,这样顶部图片的底部边缘与底部图像的顶部边缘齐平。 最佳答
我有一个 UIImage 和一个 CGPoint,它们告诉我应该朝哪个方向移动它以创建另一个图像。背景可以是任何东西。 提供初始 UIImage 我如何创建新的?最有效的方法是什么? 这是我正在做的:
我有一个 UIImage,显示在 UIImageView 中。我在 UIImageView 中还有另一张图片,它位于第一张图片上方。我希望能够仅在第一张图片的边界内拖动第二张图片。为了让我的目标更清楚
我看过这个问题:UIImage Shadow Trouble 但接受的答案对我不起作用。 我想做的是获取一个 UIImage 并向其添加阴影,然后返回一个全新的 UIImage、阴影和所有内容。 这就
我有两张图片:第一张是用户个人图片,第二张是图标(角标(Badge))。 我想在第一个 uiimage(用户图像)的左下角添加第二个 uiimage(图标),并将它们保存到一个新的 Uiimage 中
我是一名优秀的程序员,十分优秀!