Xamarin.ios 在滚动条上添加视差效果

Xamarin.ios 在滚动条上添加视差效果,xamarin.ios,uiscrollview,parallax,Xamarin.ios,Uiscrollview,Parallax,我有一个视图,上面有一个scrollview和一个常规视图,现在它只是改变了图层的高度,所以当scrollview被向下拖动时,它会使它位于最上面 我想做一个更好的,并添加一个很好的褪色效果,但目前我有困难使其褪色顺利 以下是我目前正在做的事情: private void MainScrollViewOnScrolled(对象发送方,事件参数e) { 如果(!(发送方为UIScrollView scrollView)) { 返回; } var topViewHeight=vtopanel.Bou

我有一个视图,上面有一个scrollview和一个常规视图,现在它只是改变了图层的高度,所以当scrollview被向下拖动时,它会使它位于最上面

我想做一个更好的,并添加一个很好的褪色效果,但目前我有困难使其褪色顺利

以下是我目前正在做的事情:

private void MainScrollViewOnScrolled(对象发送方,事件参数e)
{
如果(!(发送方为UIScrollView scrollView))
{
返回;
}
var topViewHeight=vtopanel.Bounds.Height;
var scrollOffset=scrollView.ContentOffset.Y;
var ScrollIndicationSets=scrollView.ScrollIndicationSets;
nfloat Scroll指示灯P=0;
var scrollOffsetDelta=topViewHeight-scrollOffsetY;
如果(scrollOffsetDelta>0)
{
scrollIndicatorTop=scrollOffsetDelta;
}
ScrollIndicationSets.Top=scrollIndicatorTop;
scrollView.ScrollIndicationSets=ScrollIndicationSets;
var generalInfoEnabled=scrollOffsetY==0;
如果(启用了通用信息)
{
vtopanel.Alpha=0;
vtopanel.Transform=CGAffineTransform.MakeIdentity();
UIView.Animate(0.3f,0,UIViewAnimationOptions.CurveEaseInOut,
() => {
vtopanel.Alpha=1;
},
无效的
);
}
其他的
{
vtopanel.Alpha=1;
vtopanel.Transform=CGAffineTransform.MakeIdentity();
UIView.Animate(0.3f,0,UIViewAnimationOptions.CurveEaseInOut,
() => {
vtopanel.Alpha=0;
},
无效的
);
}
}

它可以工作,但不是很好,当我向下拖动时,它会消失,但当我滚动回顶部时,会明显延迟顶部视图的重新出现。Android有一种很好的视差效果,希望有人能指导我在iOS上使用视差效果。

你可以将
vtopanel.Alpha
scrollOffsetY
一起更改。并通过
scrollOffsetY
的值使其
可见或不可见

例如:

    private void MainScrollViewOnScrolled(object sender, EventArgs e)
    {
        if (!(sender is UIScrollView scrollView))
        {
            return;
        }

        var topViewHeight = vTopPanel.Bounds.Height;
        var scrollOffsetY = scrollView.ContentOffset.Y;

        var scrollIndicatorInsets = scrollView.ScrollIndicatorInsets;

        nfloat scrollIndicatorTop = 0;
        var scrollOffsetDelta = topViewHeight - scrollOffsetY;

        if (scrollOffsetDelta > 0)
        {
            scrollIndicatorTop = scrollOffsetDelta;
        }

        scrollIndicatorInsets.Top = scrollIndicatorTop;
        scrollView.ScrollIndicatorInsets = scrollIndicatorInsets;

        //you can custom the topViewAlpha  here 
        //nfloat topViewAlpha = scrollOffsetY / (this.View.Frame.Height -vTopPanel.Frame.Size.Height);

        nfloat topViewAlpha = scrollOffsetY / (vTopPanel.Frame.Size.Height);

        if (topViewAlpha >=1)
        {
            topViewAlpha = 1;
        }

        //To get the opposite effect
        topViewAlpha = 1 - topViewAlpha;


        vTopPanel.Alpha = topViewAlpha;
    }
}

它有点工作,虽然它给了我相反的效果,想法是当滚动视图向下滚动时,俯视图逐渐消失,当我备份屏幕时,它逐渐消失in@Eman如果想要获得相反的效果,只需将topViewAlpha更改为(1-topViewAlpha)。检查我的最新答案。