2012-01-27 151 views
4

我有一個有趣的問題。希望有一個有趣的解決方案:)UIView的扭曲部分

我有一個UIScrollView視圖,佔用iPad屏幕的寬度。滾動視圖的內容顯然更寬。

現在,我想將轉換應用於滾動視圖的可見部分(即屏幕區域),以輕輕地將兩端曲線向上。

因此,有兩個問題:

1)就是這樣一個轉變可能呢?基本上我想將左右兩側向上移動一點,並根據需要使視圖的頂部和底部邊緣彎曲,以便中間點不會移動。

2)我不希望將其應用於滾動視圖的內容,因爲滾動視圖時效果將會丟失。相反,我希望將結果應用於父容器。這會工作嗎?

這裏有一個圖表:

enter image description here

+0

肯定有人可以幫忙嗎? – tarmes 2012-01-28 10:58:01

+1

你能提供某種圖形顯示你在找什麼?我看了這幾次,而且我不確定我是否理解你所說的兩個「問題」或目標。(並不是很明顯,內容o f滾動視圖寬於屏幕寬度。)重述您的目標可能會獲得更多關注。但是圖形也會有很大的幫助。 – Jim 2012-02-03 17:01:15

+1

嗨。也許這會有所幫助:想象一下,滾動視圖包含一條長長的水平線。我希望線條在可見窗口的末端向上彎曲,如滾動視圖的框架所定義。在您滾動時,您會始終看到相同的曲率應用於可見區域。 – tarmes 2012-02-04 14:49:51

回答

1

只是胡亂猜測,但關於你的滾動視圖的頂部使用普通圖像怎麼樣?圖像可以顯示「失真」效果,而底層視圖將保持不變。

+1

嗨。問題是,我想查看滾動視圖滾動時滾動視圖內容的變形。更大的問題是我不知道如何設置我描述的類型的扭曲。 – tarmes 2012-01-27 09:57:03

+0

,或者更好地在滾動視圖後面顯示圖像。 – ader 2012-01-27 09:57:07

+0

我需要圖像滾動和扭曲,因爲它移動.... – tarmes 2012-01-27 10:23:55

1

在桌面OS X上,這可以通過CALayer上的CIFilter來實現。但根據CALayer documentation

雖然CALayer類公開此屬性,但Core Image在iOS中不可用。目前可用於此屬性的過濾器未定義。

最好的辦法是自己實現這個使用OpenGL片段着色器。棘手的部分是訪問您想要實時轉換的區域中的視圖內容。

我還沒有看到任何操作iOS上的實況(滾動)內容。像Mail.app垃圾桶這樣的所有類似的動畫可以對靜態內容進行操作(例如,一次渲染圖像的視圖,然後轉換該圖像)。

目前我看到這個唯一可行的辦法是:

  • 在一定的時間間隔渲染視圖區的圖像
  • 變換使用OpenGL着色
  • 渲染上頂端的OpenGL輸出效果實際內容。

因爲您必須輪詢視圖,渲染圖像並將其渲染爲僅覆蓋主屏幕一部分的OpenGL視圖,所以我期望其性能是次優的。

+0

嗯,我很高興預渲染滾動視圖的全部內容,如果這提供了一個簡化的解決方案。但是,我對OpenGL一無所知。你能否提供或者指向我將執行我所描述的那種類型的失真的代碼? – tarmes 2012-01-30 15:50:42

+1

使用預先呈現的內容實際上會有所幫助。你將不得不使用opengl動畫同步滾動,但使用UIScrollView的scrollViewDidScroll委託方法很容易。至於實際的轉換,請看看現有的試圖模仿頁面捲曲的OpenGL /着色器項目。一個開源的例子是PaperStrack:http://api.mutado.com/mobile/paperstack/。該頁面還鏈接到網格變形和OpenGL ES頁面。 – 2012-01-30 15:57:01

+0

實際上,從iOS5起,核心映像可用。 – colincameron 2012-02-02 13:22:01

0

解決方案:

(1)

借鑑滾動視圖的頂部上的CALayer具有較少的不透明度,並且將創建圓角效應的滾動型。

缺點:CALayers的渲染速度太慢(特別是在舊設備上),在遊戲中使用並不是很好。您可以切換到UIImages或cocos2d精靈,另一種選擇是創建您的自己的圖層類與OpenGL,雖然那不是很簡單。希望這些選項中的一個適合你。

(2)

是您的滾動視圖後面的內容(什麼東西被下倒圓的邊角顯示)純色或其他靜電?如果是這樣,您應該能夠通過在其中心覆蓋「角落」圖形並在其邊緣覆蓋半透明(與背景顏色或任何其他邊緣)在滾動視圖的角落頂部來獲得更好的性能。在您的內容上合成四張11x11圖片的成本將大大低於剪輯它的成本。

缺點:不知道:)

(3)

scrollView.layer.cornerRadius = 11; 
scrollView.layer.masksToBounds = YES; 

這工作完全正常的iPhone 4 缺點:不中的iPhone 3GS,3G和iPod完美地工作。

+0

嗨 - 我不是在尋找一個圓角效果:( – tarmes 2012-02-06 08:00:04

0

有趣的想法!從理論上講,你不能「經」的矩陣視圖(與基體有可能只作線到線的轉換。

作爲一種變通方法,您可以用薄的意見將您的頂部和底部的屏幕區域。設置垂直這些視圖的尺度:例如8x(例如)最接近屏幕邊框的一個,然後是4x,2x ...然後將您的長卷軸視圖渲染到一些離屏容器中,並將該容器的部分映射到薄視圖,知道如何使用UIKit的API做到這一點,但它是基於OpenGL圖形工作液。