2011-07-08 133 views
2

我一直在努力與我的UIView子類動畫的方式看似小毛刺。我有如下設置:UIView調整動畫故障

self.contentMode = UIViewContentModeRedraw; 
self.contentStretch = CGRectMake(0.5f, 0.5f, 0.0f, 0.0f); 

該視圖基本上是一個矩形,它有一個3像素的筆畫。因爲我希望視圖在調整大小時不扭曲,所以我有contentStretch屬性指示視圖的中間部分。問題在於,變形發生在它不斷增長的時候,但是它在收縮時變得平滑。

好像我的動畫塊很簡單;我有單獨的成長和萎縮。這裏的成長塊:

[UIView animateWithDuration:0.5 animations:^{ 
    CGRect newRect = CGRectMake(20, 100, 200, 70); 
    [titleView setFrame:newRect]; 
}]; 

這是相當困難的崗位描述,所以我認爲組裝只隔離那些有關這部分的測試案例工程。如果有人想看看?

http://dl.dropbox.com/u/2798577/ViewResizeTest2.0.zip

你可以看到當你點擊「成長」按鈕,動畫前視圖的左側的「毛刺」。雖然在這裏清晰可見,但在我的真實項目中情況更糟糕。

我不確定這是否是我的代碼中的錯誤或框架的問題?希望它的前...

謝謝, 亞倫。

更新 已經收到雅各布的充分的反饋,我已經回到我的應用程序並刪除了contentMode設置爲UIViewContentModeRedraw,指出像他那樣,它會運行的drawRect每次動畫時間,也許,最初的框架小故障的一部分。所以現在動畫是平滑的,但它動畫到錯誤的位置,擠壓雙方。我已經更新了鏈接項目,以更準確地反映我的應用程序中發生的事情。

如果我不得不猜測,看起來contentStretch屬性沒有完成它的工作。它根據我的指令調整整個事物的大小,而不是根據CGRect區域進行調整。任何人都可以確認我是否正確使用它?

回答

2

我已經明白了這一點;這是遇到這個問題的其他人的答案。

UIView的contentStretch屬性的文檔沒有說明完整的故事。就我而言,我瞭解contentStretch描述應該更改大小的區域的「樣本」的目的。相反,contentStretch需要描述可能需要調整大小的整個區域。在我寫這篇文章的時候,這會更有意義,但之前對我來說並不明顯。

因此,我原來的聲明:

self.contentStretch = CGRectMake(0.5f, 0.5f, 0.0f, 0.0f); 

描述一個矩形是沒有寬度或高度!所以它實際上什麼都沒做。取而代之的是,我使用的是矩形,包括大多數觀點的界限,除了的目的,這是我不希望由大小變化扭曲:

self.contentStretch = CGRectMake(0.2, 0, 0.7, 1); 

注意,那就是開始20%的矩形進入x軸,並在全高度跨越70%的寬度。在我的主持人需要的尺寸中,這個很好地覆蓋了它。

感謝Jacob對他的建議,以刪除contentMode屬性;在這種情況下完全沒有必要。

乾杯, 亞倫。

1

得到TitleView.m去掉下面一行:

self.contentMode = UIViewContentModeRedraw; 

爲什麼你不希望使用UIViewContentModeRedraw是因爲它重新顯示視圖的內容時,它的範圍變化的原因。因此動畫中鋸齒狀的第一幀。

默認contentModeUIViewContentModeScaleToFill,這正是你想要的。

+0

謝謝你的雅各布。我認爲你已經解決了部分問題。但是,似乎在我的示例應用程序中顯示出一個弱點。我已經更新了該應用程序,並且在我的問題中添加了關於此的註釋。 –