zoukankan      html  css  js  c++  java
  • scrollView实现基础中心点缩放及与UIPageControl结合使用

    一般来说scrollView与UIPageControl都是结合使用,因为在使用滚动视图的时候 ,使用UIPageControl,用户可以 清楚 的明白显示的内容有多少页,如果 没有的话,总不能让用户一个个的去数。用户体验效果不理想。

    一般来说,在滑动scrollView的时候,UIPageControl的选中点的位置也会有相应的变化。当然,反之来说,改变选中点的位置,相应的scrollView显示的内容也会产生变化 。

    因为我这边需要实现的效果是:最后一张向后滑动之后,会自动跳到第一张显示的内容。如果想解决这个,只需要在第一张之前添加一个最后一张的图片。具体代码就不展示了。关于改变scrollView,来改变UIPageControl当前的值。

    具体的代码实现。

    //在滚动视图停止滚动时,改变pageControl上面点的位置
    - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
        //获取滚动视图当前的偏移量
        CGPoint offset = scrollView.contentOffset;
        //计算偏移量与屏幕宽度的关系,也就是偏移了多少倍
        NSInteger page = offset.x / kWidth;
        self.pageControl.currentPage = page - 1 < 0 ? 9 : page - 1;
    }
    

    那如果改变UIPageControl当前的值,来达到改变scrollView的内容呢。通过对所添加的UIPageControll来设置触发方法为click

    具体代码展示。

    //通过点圆点的位置来改变视图的变化
    - (void)click:(UIPageControl *)pageControl{
        self.scrollView.contentOffset = CGPointMake(kWidth * (pageControl.currentPage + 1), 0);
    }
    

    而对于scrollView来说,如果只设置了一个scrollView的话,我们所达到的效果是不理想的,因为在缩放的同时,也会改变本身的contentSize,所以所达到的效果是不会理想的,也会有很严重的恶劣感。当然,想解决这个,也非常的容易 ,只需要在scrollView上添加一个子视图,一个等大的scrollView,就称呼为小scrollView,小scrollView用来进行缩放处理,而大scrollView来进行滚动。这样一来 ,就不会改变大scrollView整体的contentSize.

    小scrollView缩放的具体代码展示。

    //必须设置缩放比例以及设置代理对象        
    smallScroll.delegate = self;
    smallScroll.minimumZoomScale = 0.5;
    smallScroll.maximumZoomScale = 2.0;
    

      

    //指定缩放的视图
    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
        //return [scrollView.subviews firstObject];
        return [scrollView.subviews objectAtIndex:0];
    }
    
    //中心点缩放
    - (void)scrollViewDidZoom:(UIScrollView *)scrollView{
        UIImageView *imageV = [scrollView.subviews firstObject];
        if (scrollView.zoomScale <= 1.0) {
            imageV.center = CGPointMake(kWidth / 2, kHeight / 2);
        }
    }
    

    因为是对小scrollView进行缩放,所以 在进行缩放前,必须要指定进行缩放的视图是哪一个。 所以 大srcollView的第一个子视图就是我想要进行缩放的视图。

    当然,到了这个地步 ,又发现了一个新的问题,滑动到下一页后,再返回刚刚缩放过的地方,发现还是改变后的图片,并没有恢复成原样。发现问题就应该合理的解决好问题。

    //减速结束,也就是停止滚动
    - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
        NSLog(@"结束滚动");
        // 先从负责滚动的⼤scrollView找到他的⼦子视图
        for (UIScrollView *sView in scrollView.subviews){
            // 在根据⼦子类的对象类型进⾏行判断
            if ([sView isKindOfClass:[UIScrollView class]]){
                // 把视图的尺⼨寸恢复到原有尺⼨寸
                sView.zoomScale = 1.0;
            }
        }
    }
    

    当然,使用这些方法的前提就是设置好代理.Delegate。

    做到这个地方,基础的都做完了。不管怎么说。合理的利用方法。发现问题并解决好问题,才是一个新手应该注意的地方。一个方法的使用,并不是单纯的只有一个使用方法,多种思路就可能会有不同的解决方式 。scrollView是滚动视图,使用还是比较简单,日常使用还是挺频繁的,而基于scrollView的UITableView才是日后使用的重点。api文档是可以很好的帮助解决了个个方法的介绍。虽然全英文,可能会看不懂。当不看,你永远不懂,所以要慢慢的,尝试了解一点。会一点是一点。

  • 相关阅读:
    WebService之Axis2 (3):使用services.xml文件发布WebService
    WebService之Axis2(2):复合类型数据的传递
    WebService之Axis2(1):用POJO实现0配置的WebService
    com.mchange.v2.c3p0.impl.NewPooledConnection@be1839d closed by a client的正确解答
    拿到新服务器时应做的标准测试
    rabbitmq heartbeat missing with heartbeat = N seconds原因总结
    从技术专家到管理者的思路转变(V1)
    netty集成ssl完整参考指南(含完整源码)
    技术晋升的评定与博弈(转)
    Eureka-zookeeper的服务发现替代方案
  • 原文地址:https://www.cnblogs.com/xueyao/p/5185794.html
Copyright © 2011-2022 走看看