Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 扭曲视图的一部分_Iphone_Ios_Ipad_Graphics_Transform - Fatal编程技术网

Iphone 扭曲视图的一部分

Iphone 扭曲视图的一部分,iphone,ios,ipad,graphics,transform,Iphone,Ios,Ipad,Graphics,Transform,我有一个有趣的问题。希望有一个有趣的解决方案:) 我有一个UIScrollView视图,它占据了iPad屏幕的宽度。显然,scrollview的内容更广泛 现在,我想对滚动视图的可见部分(即屏幕区域)应用一个变换,使其两端逐渐向上弯曲 因此,有两个问题: 1) 这样的转变可能吗?基本上,我想将左右两侧向上移动一点,并根据需要弯曲视图的上边缘和下边缘,这样中间点就不会移动 2) 我不希望将此应用于滚动视图的内容,因为当滚动出视图时,效果将丢失。相反,我希望将结果应用于父容器。这样行吗 下面是一幅图

我有一个有趣的问题。希望有一个有趣的解决方案:)

我有一个UIScrollView视图,它占据了iPad屏幕的宽度。显然,scrollview的内容更广泛

现在,我想对滚动视图的可见部分(即屏幕区域)应用一个变换,使其两端逐渐向上弯曲

因此,有两个问题:

1) 这样的转变可能吗?基本上,我想将左右两侧向上移动一点,并根据需要弯曲视图的上边缘和下边缘,这样中间点就不会移动

2) 我不希望将此应用于滚动视图的内容,因为当滚动出视图时,效果将丢失。相反,我希望将结果应用于父容器。这样行吗

下面是一幅图:


Tim

只是一个猜测,但在滚动视图顶部使用普通图像怎么样?图像可能会显示“失真”效果,而底图视图将保持不变。

在桌面OS X上,这可以使用
CALayer上的
iFilter
。然而,根据该报告:

虽然CALayer类公开此属性,但核心映像在iOS中不可用。当前,此属性可用的筛选器未定义

最好是自己使用OpenGL片段着色器实现这一点。棘手的部分是在您希望实时转换的区域中访问视图的内容

我还没有在iOS上看到任何关于实时(滚动)内容的操作。所有类似的动画,如Mail.app垃圾桶动画、页面卷曲等,都对静态内容进行操作(例如,视图只渲染一次图像,然后变换该图像)

目前,我认为唯一可行的方法是:

  • 以特定间隔将视图区域渲染为图像
  • 使用opengl着色器进行变换
  • 在实际内容之上呈现opengl输出
因为您必须轮询视图,渲染到图像,并将其渲染为仅覆盖主屏幕一部分的OpenGL视图,所以我预计性能将次优

解决方案:

(一)

在scrollview顶部绘制不透明度较小的CALayer,这将为scrollview创建圆角效果

缺点:CALayers的渲染对于这种使用来说太慢了(尤其是在较旧的设备上),在游戏中使用它不是很好。你可以切换到UIImages或cocos2d sprites,另一个选择是用OpenGL创建你自己的图层类,尽管那不是很简单。希望这些选择中的一个对你有用

(二)

滚动视图后面的内容(圆角下显示的内容)是纯色还是静态?如果是这样的话,您应该能够通过在“角”图形的中心覆盖半透明的图形,在滚动视图的角顶部的边缘覆盖不透明的图形(使用背景色或其他颜色)来获得更好的性能。在内容上合成四个11x11图像的成本将大大低于剪辑它的成本

缺点:未知:)

(三)

这对于iPhone4来说非常有效。
缺点:在iPhone3GS、3G和iPod中不能完美工作。

有趣的想法!理论上,你不能通过矩阵“扭曲”你的视图(使用矩阵,你可以只进行线到线的变换)


作为一种解决方法,您可以使用精简视图划分顶部和底部屏幕区域。设置这些视图的垂直比例:8x(例如)对于最接近屏幕边框的一个,然后是4x、2x…然后将长滚动视图渲染到一些屏幕外容器中。并将此容器的部分映射到精简视图。我不知道如何使用UIKit API进行此操作,但这是基于OpenGL的图形的有效解决方案。

您好。问题是,我希望看到应用于滚动时滚动视图。更大的问题是,我不知道如何设置我描述的类型的失真。或者更好的方法是将图像放在滚动视图后面。你可以使用滚动视图委托方法的去加速并手动制作动画吗?你必须以某种方式欺骗它…肯定有人可以帮助吗?你能提供这样的帮助吗请给我一些图片来展示你想要什么?我已经读了好几遍了,但我不确定我是否理解你所说的两个“问题”或目标。(而且滚动视图的内容是否比屏幕的宽度宽并不明显。)重申你的目标可能会得到更多的关注。但图形也会有很大帮助。嗨,也许这会有帮助:想象一下滚动视图包含一条长长的水平晾衣线。我希望这条线在滚动视图框架定义的可见窗口末端向上弯曲。当你滚动时,你总会看到同样的曲率应用d到可见区域。@tarmes,仍然没有你想要的具体图像。也许发布一个模型图像将极大地帮助我们了解你需要什么。而且你也有更大的可能性,你的问题可以更快地得到解决。嗯,我很高兴预渲染滚动视图的全部内容,如果这提供了一个简化的解决方案。However,我对OpenGL一无所知。你能提供或指点我,任何能执行我描述的失真类型的代码吗?使用预渲染的内容实际上会很有帮助。你必须将滚动与OpenGL动画同步,但使用UIScrollView的scrollViewDidScroll委托方法很容易。如对于实际转换,请查看尝试模拟页面卷曲的现有OpenGL/shader项目。PaperStrack是一个开源示例:。该页面还链接到网格变形和OpenGL ES页面。实际上,从iOS5开始,核心图像可用。@c.cam108-正确,iOS 5上提供了CIFilter。但您无法应用
scrollView.layer.cornerRadius = 11;
scrollView.layer.masksToBounds = YES;