2012-12-06 47 views
1

我試圖讓我的圖像看起來像踩着或「壓扁」。 這是我得到的代碼,但不僅僅是擠壓,它也推動了底部(因爲它是一個縮放動畫)。有沒有辦法讓圖像縮短而不是縮小?也許我需要用兩個圖像?:「壁球」動畫效果

  [UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseInOut 
          animations:^{ 
           basketView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1, 0.9);} 
          completion:^(BOOL finished){if (finished){ 

       [UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseInOut 
           animations:^{ 
            basketView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 1.0);} 
           completion:NULL];}}]; 
+0

所以像縮放但底部仍然在一個固定的位置? – Tommy

+0

是的,正是:) – user1824518

回答

2

縮放會發生相對於視圖的層的anchorPoint,這是默認層的中心。

選項是: - 更改定位點; - 組成三部分的轉換:(1)將錨點翻譯爲底部; (2)規模; (3)將錨點翻譯回原來的位置; - 組成轉換分兩部分:(1)規模; (2)將底部翻譯到原來的位置。

如果其他所有內容相同,更改定位點與翻譯具有相同的效果,因此摘要版本將以某種形式添加翻譯,無論您如何描述整個過程。最簡單的事情可能是在設置變換的同時設置圖層的center。由於縮放和平移是同時應用的線性變換,它們將完全同步。

所以例如你會改變:

basketView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1, 0.9); 

要更多的東西一樣:

CGFloat amountToScale = 0.9f; 

CGAffineTransform transform = 
      CGAffineTransformMakeTranslation(0.0f, 
         (1.0f - amountToScale)*0.5f*basketView.bounds.size.height); 

basketView.transform = CGAffineTransformScale(transform, 
            1.0f, amountToScale); 

在這種特定的情況下,擴展到0.9將消除一個總的原始尺寸的0.1。錨點位於中心位置,所以0.05的位置離開頂部,0.05位置離開底部。你不希望任何東西從底部掉下來,所以你可以將視角向下移動以抵消這種情況。

+0

偉大的信息,非常感謝您的幫助! – user1824518