标签:
UIScrollView的使用步骤
UIScrollView不能滚动的几种情况
UIScrollview常见属性
contentOffset
contentInset
注意查看PPT中的对比图理解: contentSize/contentOffset/contentInset/frame
如何监听一个控件
代理
使用代理的步骤:
代理的规律:
代理的应用场景
如何监听UIScrollview停止滚动
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
NSLog(@"%s = %d", __func__, decelerate);
// 1.判断是否有惯性, 如果没有惯性手动调用scrollViewDidEndDecelerating告知已经完全停止滚动
if (decelerate == NO) {
[self scrollViewDidEndDecelerating:scrollView];
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
NSLog(@"%s", __func__);
NSLog(@"停止滚动");
self.iv.alpha = 1.0;
}
步骤:
常用方法
如何保证被缩放的子控件永远居中
第一种
// 1.判断contentSize的宽高, 是否小于UIScrollView的frame的size
if (scrollView.contentSize.width < scrollView.bounds.size.width) {
self.iv1.center = CGPointMake(scrollView.bounds.size.width * 0.5, scrollView.bounds.size.height * 0.5);
}
if (scrollView.contentSize.height < scrollView.bounds.size.height) {
self.iv1.center = CGPointMake(scrollView.bounds.size.width * 0.5, scrollView.bounds.size.height * 0.5);
}
// 1.判断contentSize的宽高, 是否小于UIScrollView的frame的size
if (scrollView.contentSize.width < scrollView.bounds.size.width) {
// 计算X的值
CGFloat x = (scrollView.contentSize.width * 0.5) + ((scrollView.bounds.size.width - scrollView.contentSize.width) * 0.5);
// 重新设置center
self.iv1.center = CGPointMake(x, self.iv1.center.y);
}
if (scrollView.contentSize.height < scrollView.bounds.size.height) {
// 计算Y的值
CGFloat y = (scrollView.contentSize.height * 0.5) + ((scrollView.bounds.size.height - scrollView.contentSize.height) * 0.5);
// 重新设置center
self.iv1.center = CGPointMake(self.iv1.center.x, y);
}
CGFloat x = scrollView.contentSize.width < scrollView.bounds.size.width ? (scrollView.bounds.size.width - scrollView.contentSize.width) * 0.5 : 0.0;
CGFloat y = scrollView.contentSize.height < scrollView.bounds.size.height ? (scrollView.bounds.size.height - scrollView.contentSize.height) * 0.5 : 0.0;
self.iv1.center = CGPointMake(scrollView.contentSize.width * 0.5 + x, scrollView.contentSize.height * 0.5 + y);
图片轮播器
UIPageControl
自定义页码
[pageControl setValue:[UIImage imageNamed:@"current"] forKeyPath:@"_currentPageImage"];
[pageControl setValue:[UIImage imageNamed:@"other"] forKeyPath:@"_pageImage"];
[pageControl addTarget:self action:@selector(nextPage) forControlEvents:UIControlEventValueChanged];
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
// 判断是否有惯性, 如果没有就手动调用scrollViewDidEndDecelerating
if (NO == decelerate) {
[self scrollViewDidEndDecelerating:scrollView];
}
}
// 只有有惯性才会调用
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
// 1.动态计算当前的页码
// 页码 = UIScrollView的偏移位 / UIScrollView的宽度
int page = scrollView.contentOffset.x / scrollView.bounds.size.width;
NSLog(@"page = %d", page);
// 2.设置当前的页码
self.pageControl.currentPage = page;
}
+ 实时切换
// 只要滚动就会调用
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
// NSLog(@"%s", __func__);
// 1.动态计算当前的页码
// 页码 = UIScrollView的偏移位 / UIScrollView的宽度
CGFloat page = scrollView.contentOffset.x / scrollView.bounds.size.width;
NSLog(@"page = %f", page + 0.5);
// 2.设置当前的页码
self.pageControl.currentPage = (int)(page + 0.5);
}
注意:
如何暂停和启动定时器
// 暂停定时器
// 设置timer的开始时间为 遥远的未来 4001
// NSLog(@"%@", [NSDate distantFuture]);
[self.timer setFireDate:[NSDate distantFuture]];
// 开启定时器
// 设置定时器的开始时间为过去的某一个时间, 也就意味着立刻开始
// [self.timer setFireDate:[NSDate distantPast]];
// 设置定时器从当前时间之后两秒才开始执行
[self.timer setFireDate:[NSDate dateWithTimeIntervalSinceNow:2.0]];
标签:
原文地址:http://www.cnblogs.com/wangjunjiedebokeyuan/p/5185991.html