我說的是像insertItemsAtIndexPaths
或moveItemAtIndexPath:toIndexPath:
之類的東西。我曾嘗試將它包裝在一個動畫塊中,但那不起作用。看起來動畫卡住了.25或.3秒,但我想減慢這一點。除了自己實施這個運動,這是不值得麻煩的,沒有人知道這對於公共API是否可行?有沒有辦法改變UICollectionViews的動畫速度?
6
A
回答
5
絕對!但是你無法正確使用UIView
動畫塊。你需要挖掘Core Animation。
集合視圖有助於將動畫添加到支持每個UICollectionViewCell
的CALayer
。但是如果您實現自己的佈局(或現有的子類),則可以在方法finalizeCollectionViewUpdates
中對這些動畫進行所有必要的修改。
從UICollectionViewLayout
類文檔:
集合視圖調用此方法如前述動畫任何改變到位之前的最後一個步驟。
下面是如何用自己的替換默認位置動畫的例子:
- (void)finalizeCollectionViewUpdates
{
for (UICollectionViewCell *cell in [self.collectionView visibleCells])
{
CAAnimation *positionAnimation = [cell.layer animationForKey:@"position"];
if (positionAnimation)
{
[cell.layer removeAnimationForKey:@"position"];
CALayer *presentationLayer = cell.layer.presentationLayer;
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
[animation setFromValue:[NSValue valueWithCGPoint:presentationLayer.position]];
[animation setToValue:[NSValue valueWithCGPoint:cell.layer.position]];
[animation setDuration:0.4];
[cell.layer addAnimation:animation forKey:@"position"];
}
}
}
只看CALayer
動畫相關的方法,看你如何挖成什麼樣的動畫正在運行在你的圖層上。
使用這種方法,您甚至可以使用CAKeyframeAnimation
或其他任何你能想到的創意並添加過沖/反彈效果。你也可以做一些事情,比如選擇性地禁用一些動畫(如大小)並保留其他的(如位置)。
1
複製這種過度從這裏:https://stackoverflow.com/a/18392148/1751266
您可以更改動畫的速度與CALayer的。因此,對於UICollectionView這看起來像以下:
[self.collectionView.viewForBaselineLayout.layer setSpeed:0.1f];
而且你可以改回原來的速度:
[self.collectionView.viewForBaselineLayout.layer setSpeed:1.0f];
對於這個工作,你可能需要導入QuartzCore:
#import <QuartzCore/QuartzCore.h>
請記住,它會影響同一圖層上的任何其他動畫,包括動畫UIImageView等,因此它們可能需要補償。
相關問題
- 1. 有沒有辦法改變媒體元素的速度
- 2. 有沒有辦法改變scrollRectToVisible的速度?
- 3. 有沒有更改滑塊動畫速度的方法?
- 4. 目的c - 有沒有辦法用動畫改變leftBarButtonItem?
- 5. 有沒有辦法改變一個UILabel的textAlignment動畫?
- 6. 有沒有辦法在執行時減慢翻譯動畫的速度?
- 7. 有沒有辦法讓hg-git的推動速度更快?
- 8. SVG動畫有一個屬性dur,但有沒有辦法設置動畫的速度呢?
- 9. 有沒有辦法改變UIToolbar的高度?
- 10. 有沒有辦法改變所有滾動條(Win10)的樣式?
- 11. MVC3有沒有辦法改變剃刀
- 12. 有沒有辦法改變JOptionPane.showMessageDialog字體?
- 13. 有沒有辦法改變url是iframe?
- 14. 有沒有辦法改變使用腳本統一2d動畫精靈的alpha?
- 15. 有沒有辦法改變Bootstrap導航欄高度?
- 16. CSS3:有沒有辦法改變字體高度?
- 17. 有沒有辦法改變高度來填充休息區?
- 18. 有沒有辦法改變啓動的Thread的名字?
- 19. 有沒有辦法動態改變一個按鈕的CSS類?
- 20. 有沒有辦法改變自動創建的默認「ID」列?
- 21. 有沒有辦法在div中改變Firefox的滾動條邊?
- 22. 有沒有辦法改變ListView的滾動顏色?
- 23. 有沒有辦法動態改變圖標的顏色?
- 24. 有沒有辦法動態改變Flutter TextField的maxLines?
- 25. wxPython:有沒有辦法改變wx.ScrolledWindow中滾動條的顏色?
- 26. 有沒有辦法改變delphi 2010中的滾動條樣式?
- 27. 有沒有辦法打印所有速度上下文?
- 28. iOS 7 Sprite Kit動畫改變速度
- 29. 有沒有辦法提高鈦自定義行Ti.UI.TableView的速度?
- 30. 有沒有辦法以2-3 mbps的速度使用串口?