【发布时间】:2017-02-15 15:20:56
【问题描述】:
在 Xamarin 中! Scrolled 被解雇,但它不包含 X 和 Y 信息。我需要知道何时滚动视图以调整某些视图以使它们看起来好像没有移动。 DraggingEnded 仅在滚动结束时触发,为时已晚。如何在更改后立即接收?
【问题讨论】:
标签: ios xamarin uiscrollview xamarin.ios
在 Xamarin 中! Scrolled 被解雇,但它不包含 X 和 Y 信息。我需要知道何时滚动视图以调整某些视图以使它们看起来好像没有移动。 DraggingEnded 仅在滚动结束时触发,为时已晚。如何在更改后立即接收?
【问题讨论】:
标签: ios xamarin uiscrollview xamarin.ios
public class ScrollViewDelegate : UIScrollViewDelegate
{
public ScrollViewDelegate()
{
//...
}
public override void DraggingStarted(UIScrollView scrollView)
{
System.Diagnostics.Debug.WriteLine("Dragging started offset: " + scrollView.ContentOffset);
}
}
[assembly: ExportRenderer(typeof(SomeScrollViewControl), typeof(SomeScrollView))]
namespace SomeNamespace
{
public class SomeScrollView : ViewRenderer<SomeScrollViewControl, SomeScrollView>
{
public SomeScrollView()
{
//...
}
protected override void OnElementChanged(ElementChangedEventArgs<SomeScrollViewControl> e)
{
if (e.OldElement == null)
{
//Create someScrollView...
someScrollView.Delegate = new ScrollViewDelegate();
}
}
}
}
【讨论】:
在您的UIScrollView 子类中,覆盖ContentOffset 属性并监控set,您将在用户滚动/平移时获得新的视图X/Y。
public override CoreGraphics.CGPoint ContentOffset
{
get
{
return base.ContentOffset;
}
set
{
Console.WriteLine($"{value.X}:{value.Y}");
base.ContentOffset = value;
}
}
输出:
39.0704398717043:41.4920965388485
35.3280093038005:36.4695722954986
31.736242067681:31.6492455873442
28.1199544514634:26.7960113338755
24.5949600095583:22.0652969703334
21.2827079155381:17.6200932075763
17.9479795925504:13.1447252499626
【讨论】: