![](/img/trans.png)
[英]Autoscroll UIScrollView to fit content like in native iOS Mail.app
[英]Autoscroll UIScrollView, allow user to interrupt animation
我正在嘗試對UIScrollView中的一堆圖像進行動畫處理。 屏幕顯示時,圖像應開始滾動,我可以這樣做。 目前,我正在使用UIView動畫,如下所示:
[Export("ScrollToRight")]
private void ScrollRight()
{
if (!imagesShouldScroll)
return;
UIView.BeginAnimations("ScrollRight");
UIView.SetAnimationCurve(UIViewAnimationCurve.Linear);
UIView.SetAnimationDuration(test.Count * 10);
scrlImages.ContentOffset = new PointF(((scrlImages.Frame.Height + 2) * test.Count) - scrlImages.Frame.Width, 0);
UIView.SetAnimationDelegate(this);
UIView.SetAnimationDidStopSelector(new Selector("ScrollToLeft"));
UIView.CommitAnimations();
}
[Export("ScrollToLeft")]
private void ScrollLeft()
{
if (!imagesShouldScroll)
return;
UIView.BeginAnimations("ScrollLeft");
UIView.SetAnimationCurve(UIViewAnimationCurve.Linear);
UIView.SetAnimationDuration(test.Count * 10);
scrlImages.ContentOffset = new PointF(0, 0);
UIView.SetAnimationDelegate(this);
UIView.SetAnimationDidStopSelector(new Selector("ScrollToRight"));
UIView.CommitAnimations();
}
這非常適合在UIScrollView中來回滾動。 我需要做的就是讓用戶通過像往常一樣滾動列表的方式在ScrollView上滑動來中斷動畫。 因此,我將偵聽器附加到ScrollView,如下所示:
scrlImages.DraggingStarted += (sender, e) =>
{
if (imagesShouldScroll)
{
scrlImages.Layer.RemoveAllAnimations();
imagesShouldScroll = false;
}
};
這樣可以按預期停止動畫。 問題在於ContentOffset已經設置為忙於動畫的邊緣。 因此,當用戶滑動ScrollView時,它突然跳到列表的末尾。 我希望用戶能夠將動畫停在原處並手動接管滾動。 我在想應該有一種方法可以使用動畫的開始時間和當前圖形時間來確定動畫已經運行了多長時間,以確定當時ContentOffset會在哪里,然后跳回那里。 不過,對我來說,這聽起來很棘手,不盡人意。
注意:我知道我可以將UIView.Animate與UIViewAnimationOptions.Autoreverse一起使用,當時我還不知道。 我還能夠使用計時器來實現我想要的行為,以定期設置ContentOffset。 雖然這是受CPU限制的,所以它不是很流暢。
在從滾動視圖的圖層中刪除所有動畫之前,請從其presentationLayer
讀取bounds.origin
並將其contentOffset
設置為該值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.