美文网首页
UIScrollView的基本属性

UIScrollView的基本属性

作者: junden | 来源:发表于2016-07-31 22:35 被阅读0次

注:只要有学到新的知识,会不断更新

CGPoint contentOffset;                  // 显示窗口在滚动内容画布里面的左上角的偏移量,(x, y)
CGSize  contentSize;                    // 滚动内容的画布大小
UIEdgeInsets contentInset;                   // 可以在外围加入的一个边框,有距离高,底部,左边,右边的距离
  • 可能会用到的方法来设置contentSize,CGRectGetMaxY(放一个控件的frame),通过这个方法,可以返回一个控件的最大y坐标,比如要设置一个最底部的空间刚好压滚动空间contentsize的底部,就用这个方法令滚动控件的高等于最底部空间的最大y

关于监控滚动的代理

  • 先遵循<UIScrollViewDelegate>,并设置代理为self
self.scrollView.delegate = self;
  • 此时可以实现代理里面各种方法来对滚动进行监听,并完成对应的操作

  • 比如实现- (void)scrollViewDidScroll:这个方法,只要在滚动,就调用这个方法。可以用来设置pagecontrol的当前页的变换

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
   //利用偏移量,设置控件的当前页
  int page = (int)(scrollView.contentOffset.x / scrollView.frame.size.width + 0.5);
   self.pageControl.currentPage = page;

}

封装自动来回滚动UIScrollView记录

首先创建一个自定义xib,和两个继承UIview的类文件

  • 要提供一个接口给外界创建,比如类方法,名为类名,
  • 通过mainbundle加载xib文件,并返回。
  • 通过awakeFromNib或者initWithFrame来初始化控件,里面调用[self setUp]
    • //通过代码创建空间时,用这个方法来初始化 (instancetype)initWithCoder:(NSCoder *)aDecoder
    • /通过xib/storyboard中创建控件时,调用这个方法初始化(void)awakeFromNib
  • 记得定义一个叫setup的方法,里面放初始化的操作.

接着重写传进来的数据set方法,并重写layoutSubviews

  • 将传入的数据进行过滤,赋值,布局等操作
  • 在layoutSubview(当父控件位置被修改的时候调用)s中对子控件 frame等属性设置

将定时器写在setUp内

    [NSTimer scheduledTimerWithTimeInterval:1.5
        这里要写方法所在的类            target:pageview
                                     selector:@selector(changePage)
                                     userInfo:nil
                                     repeats:YES];
    }
  • 如何换滚动的方向
// MARK: - 换页的功能
- (void)changePage{
    CGFloat imgW = self.scrollView.frame.size.width;
    CGFloat dx = self.scrollView.contentOffset.x + imgW;
    //记录当前的方向, static用来存储,下次进来的值保持上次
    static BOOL direction ;
    //仅当最后一页或者第一页的时候判断方向
    if(self.pageControl.currentPage == self.imageNames.count -1|| self.pageControl.currentPage == 0)
    {direction = [self checkDirection];}
    //根据判断结果进行方向滚动
    if(direction){
      [UIView animateWithDuration:1.0 animations:^{self.scrollView.contentOffset = CGPointMake(dx, 0);}];
    }
    if(!direction ){
      [UIView animateWithDuration:1.0 animations:^{self.scrollView.contentOffset = CGPointMake(dx - 2*imgW, 0);}];
    }
}
// MARK: - 方向的判断
- (BOOL) checkDirection{
    BOOL gorigth = YES ;
    if (self.pageControl.currentPage == 0) {
        gorigth = YES;
    }
    if(self.pageControl.currentPage == self.imageNames.count -1){
        gorigth = NO;
    }
    return gorigth;
}

遇到的问题

  • 不能将定时器放在layoutSubview方法中,这样会由于苹果系统的runloop机制,这个机制会收集一些修改(frame,color等),然后在循环结束时一并的去修改,此时就会连续几乎同时的调用多次layoutSubview中的方法.

相关文章

网友评论

      本文标题:UIScrollView的基本属性

      本文链接:https://www.haomeiwen.com/subject/sslxsttx.html