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