2012-08-02 78 views
1

我一直在嘗試將圖像視圖設置爲在屏幕上向上滑動。當位置向上移動時,視圖高度也增加。查看IOS 5.x和IOS 4.x之間的行爲差​​異

在我的iPhone 4S(5.x)上,圖像視圖的行爲與預期相同,視圖只隨着高度的增加向上移動,但在iPhone 3G(4.1)中,視圖在此動畫中向下移動一點。

由於圖像視圖用於創建不昂貴的陰影效果,因此需要這樣的準確性級別。其對齊對於效果非常重要。圖像是可調整大小的圖形。

這是我如何改變視圖

CGRect oldShadow = self.shaddowView.frame; 
    oldShadow.size.height = oldShadow.size.height+200; 
    oldShadow.origin.y = oldShadow.origin.y - 200; 
    self.shaddowView.frame =oldShadow; 

這是如何視圖的圖像被設置爲可調整大小的位置和大小:

UIImage* shadow = [[UIImage imageNamed:@"shadow.png"] stretchableImageWithLeftCapWidth:20 topCapHeight:20]; 
self.shaddowView.image = shadow; 

感謝。

回答

0

我使用了下面的動畫,不僅圍繞起始位置,而且圍繞預期的最終位置,這樣我就可以確認是否發生了任何不希望的視圖移動(除了明顯的向上擴展),但是它好工作在iOS 4.2.1:

[UIView animateWithDuration:2.0 
       animations:^{ 
        CGRect newImageFrame = imageView.frame; 
        newImageFrame.origin.y -= stretchBy; 
        newImageFrame.size.height += stretchBy; 
        imageView.frame = newImageFrame; 
       }]; 

我沒有iOS 4.1的設備圍坐(我的老3G測試手機運行的iOS 4.2.1,支持的最新版本的iOS爲設備),所以我不能說這個,但iOS 4.2.1沒問題。

不過,我不得不承認,當我對動畫改變框架進行動畫製作時,最終的框架並不完全是你指定的。如果你完成了這個框架,它不是正確的值嗎?或者你是否說它在動畫期間瞬間移動,但最後會在正確的位置結束?或者即使在動畫完成時它在動畫期間向下移動並且以錯誤的位置結束?

我不知道是否還有其他事情正在進行(例如,您的動畫視圖是滾動視圖的子視圖,該視圖本身可能正在移位?還是有一些代碼未顯示,意外地在動畫之後進一步調整了框架?等等。)。似乎有點調試應該確認幀是否實際上不是你想要的,或者是否有其他問題正在進行。


我最初回答提示shouldRasterize的選擇,但如果你想支持舊的iPhone 3G手機,那麼也許這還不夠好。這些舊手機肯定會出現一些小問題。無論如何,這是我的原始答案:

我認爲你這樣做是因爲layer陰影功能是一點點CPU密集型。但我聽說(但不能對它說),如果你使用shouldRasterize選項,它會好一點:

viewThatNeedsShadow.layer.shadowColor = [UIColor blackColor].CGColor; 
viewThatNeedsShadow.layer.shadowOffset = CGSizeMake(3.0, 3.0); 
viewThatNeedsShadow.layer.shadowOpacity = 0.5; 
viewThatNeedsShadow.layer.shouldRasterize = YES; 
viewThatNeedsShadow.clipsToBounds = NO; 
相關問題