[IOS笔记]

CGSize imageSize = [UIImage imageNamed:@"s2_1.png"].size;
    for (int i=0; i<10; ++i) {
        UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"s2_%d.png", i+1]];
        UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
        imageView.frame = CGRectMake(imageSize.width * i,self.m_scrollView.bounds.size.height/2-imageSize.height/2, imageSize.width, imageSize.height);
        [self.m_scrollView addSubview:imageView];
    }
    
    self.m_scrollView.contentSize = CGSizeMake(imageSize.width*10, self.m_scrollView.bounds.size.height);
    self.m_scrollView.scrollEnabled = YES;
    self.m_scrollView.pagingEnabled = NO;  //是否整页滑动
    self.m_scrollView.bounces = YES; //碰到边框时是否反弹
    self.m_scrollView.showsHorizontalScrollIndicator = NO; //显示滚动条

从你的手指touch屏幕开始,scrollView开始一个timer,如果:

1.  150ms内如果你的手指没有任何动作,消息就会传给subView。

2.  150ms内手指有明显的滑动(一个swipe动作),scrollView就会滚动,消息不会传给subView,这里就是产生问题二的原因。

3. 150ms内手指没有滑动,scrollView将消息传给subView,但是之后手指开始滑动,scrollView传送touchesCancelled消息给subView,然后开始滚动。

观察下tableView的情况,你先按住一个cell,cell开始高亮,手不要放开,开始滑动,tableView开始滚动,高亮取消。

delaysContentTouches的作用:

这个标志默认是YES,使用上面的150ms的timer,如果设置为NO,touch事件立即传递给subView,不会有150ms的等待

cancelsTouches的作用:

这个标准默认为YES,如果设置为NO,这消息一旦传递给subView,这scroll事件不会再发生。

内存:

初始化如果load所有图片,则内存过大,

所有通过复用,当imageview 滑动出screen,则移动位置到最后或者最后一个位置,同时调整载入图像

 //如果最左边view出了左边框,将view放到最右边
    UIImageView *view = [imageStore objectAtIndex:0];
    
    if (view.frame.origin.x + view.frame.size.width < offset) {
        [imageStore removeObject:view];
        UIImageView *lastView = [imageStore lastObject];
        view.frame = CGRectMake(lastView.frame.origin.x+lastView.frame.size.width, view.frame.origin.y, view.frame.size.width, view.frame.size.height);
        [imageStore addObject:view];
        
    }
    
    //如果最右边view出了左边框,将view放到最右边,imageStore中为包含所有image view array
    view = [imageStore lastObject];
    if (view.frame.origin.x > offset+self.frame.size.width) {
        [imageStore removeObject:view];
        UIImageView *firstView = [imageStore objectAtIndex:0];
        view.frame = CGRectMake(firstView.frame.origin.x-firstView.frame.size.width, view.frame.origin.y, view.frame.size.width, view.frame.size.height);
        [imageStore insertObject:view atIndex:0];
    }
    
    for (int i = 0; i < imageStore.count; i++) {
        UIImageView *view = [imageStore objectAtIndex:i];

        //设置图片
        int currentView = view.frame.origin.x/_itemSize.width+1;
        currentView = currentView%_imageAry.count;
        
        //_imageAry为图片array
        [view setImage:[_imageAry objectAtIndex:currentView]];
        
    }
原文地址:https://www.cnblogs.com/zengyou/p/3325677.html