Ios 如何获取屏幕上UIview的百分比

Ios 如何获取屏幕上UIview的百分比,ios,uiview,uiimageview,fadein,Ios,Uiview,Uiimageview,Fadein,我正在构建一个IOS应用程序,当您第一次开始使用该应用程序时,它将以UIPageViewController启动。我一直在寻找一种方法,根据用户刷到下一个屏幕的距离,在imageView中淡入淡出。ie:当他们刷过一半屏幕时,alpha=0.5,当屏幕完全刷过时,alpha=1.0 我尝试过使用“animateWithDuration”,但这似乎要等到视图完全显示在屏幕上,所以它显示了一个滞后的淡入。我曾考虑使用手势识别器,但pageViewController已经有了它们,因此我必须覆盖它们。

我正在构建一个IOS应用程序,当您第一次开始使用该应用程序时,它将以UIPageViewController启动。我一直在寻找一种方法,根据用户刷到下一个屏幕的距离,在imageView中淡入淡出。ie:当他们刷过一半屏幕时,alpha=0.5,当屏幕完全刷过时,alpha=1.0


我尝试过使用“animateWithDuration”,但这似乎要等到视图完全显示在屏幕上,所以它显示了一个滞后的淡入。我曾考虑使用手势识别器,但pageViewController已经有了它们,因此我必须覆盖它们。

添加在视图上平移手势以了解屏幕上的滑动量。定义一个变量,比如说
CGFloat xposition

- (void)panRecognized:(UIPanGestureRecognizer *)gesture
{
  CGPoint translate = [gesture translationInView:self.view];

  if (gesture.state == UIGestureRecognizerStateBegan)
  {
     xpostion = translate.x;
  }
  else if (gesture.state == UIGestureRecognizerStateEnded)
  {
     CGFloat totalXSwipe = translate.x - xpostion;

    CGFloat width = [UIScreen mainScreen].bounds.size.width;

    CGFloat percentage = fabs(totalXSwipe)/width;
    NSLog(@"Swipe percentage %f",percentage);

    //Can use in your requirement to set as alpha value as it will be always less or equal to zero
  }
}

以下是帕雷什转换成Swift的Objective-C代码:

var xpostion: CGFloat = 0.0
func panRecognized(_ gesture: UIPanGestureRecognizer?) {
    guard let translate: CGPoint? = gesture?.translation(in: view) else { return }

    if gesture?.state == .began {
        xpostion = (translate?.x)!
    } else if gesture?.state == .ended {
        let totalXSwipe: CGFloat = (translate?.x ?? 0.0) - xpostion

        let width: CGFloat = UIScreen.main.bounds.size.width

        let percentage = CGFloat(fabs(Float(totalXSwipe))) / width
        print("Swipe percentage \(percentage)")

        //Can use in your requirement to set as alpha value as it will be always less or equal to zero
    }
}

快乐编码

您还可以简单地利用UIScrollView API来帮助实现UIView查看/滚动的百分比。这里有一个方法

拖动UIScrollView对象并将其正确连接到故事板中的相应场景,或在代码中正确实例化后,继续将当前对应的ViewController类与UIScrollViewDelegate协议相一致,以计算屏幕查看的百分比

例如,
class YourCustomViewController:UIViewController、UIScrollViewDelegate{}

然后,在
YourCustomViewController
类中的某个地方,您可以实现以下代码。下面是实现屏幕垂直滚动百分比的代码:

func computePercentage(in scrollView: UIScrollView) {
    let height = scrollView.contentSize.height
    let viewed = scrollView.contentOffset.y + scrollView.bounds.size.height
    let pagePercentScrolled = viewed / height * 100.0
   // print("Percent Scrolled: \(pagePercentScrolled)")

    if pagePercentScrolled >= 50.0 && pagePercentScrolled < 100.0 {
        //Do something.
        //Example, set imageView alpha to half
        yourCustomImageView.alpha = 0.5
    } else if pagePercentScrolled == 100 {
        //Do something.
        //Example, fade in/show full imageView
        yourCustomImageView.alpha = 1.0
    }
}

此函数必须不是@iAction吗?两种手势状态是否都假定为“结束”?难道一个不是“开始”,另一个是“结束”吗?最后,这会覆盖UIPageViewController的手势识别器,因为我知道它已经内置了滑动手势。
    func computePercentage(in scrollView: UIScrollView) {
    let width = scrollView.contentSize.width
    let viewed = scrollView.bounds.size.width - scrollView.contentOffset.x
    let pagePercentScrolled = viewed / width * 100.0
    //print("Percent Scrolled: \(pagePercentScrolled)")

    if pagePercentScrolled >= 50.0 && pagePercentScrolled < 100.0 {
        //Do something.
        //Example, set imageView alpha to half
        yourCustomImageView.alpha = 0.5
    } else if pagePercentScrolled == 100 {
        //Do something.
        //Example, fade in/show full imageView
        yourCustomImageView.alpha = 1.0
    }
}
    // MARK: Scroll View Delegate
func scrollViewDidScroll(_ scrollView: UIScrollView) {
    computePercentage(in: scrollView)
}

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    computePercentage(in: scrollView)
}

func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
    computePercentage(in: scrollView)
}

func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
    computePercentage(in: scrollView)
}