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]]; }