//————————–UIScrollView————————
UIScrollView常见属性
// 设置只能在一个方向上滚动
self.scrollView.directionalLockEnabled = YES;
// 内容在scrollView四周的弹簧效果
self.scrollView.bounces = NO;
// 实现下拉刷新
// 不管有没有contentSize 都可以水平 垂直方向的拉
self.scrollView.alwaysBounceVertical = YES;
self.scrollView.alwaysBounceHorizontal = YES;
// 分页效果
self.scrollView.pagingEnabled = YES;
// UIButton *btn ;
// btn.enabled = NO;
// btn.userInteractionEnabled = NO;
// 设置scrollView能不能滚动
self.scrollView.scrollEnabled = NO;
// 任何继承自UIView的子类都能使用以下属性设置与用户是否能交互
self.scrollView.userInteractionEnabled = NO;
// 滚动条在scrollView的subview中
NSLog(@”——subviews = %@”,self.scrollView.subviews);
// 设置水平方向的滚动条
self.scrollView.showsHorizontalScrollIndicator = NO;
self.scrollView.showsVerticalScrollIndicator = NO;
// subviews中没有滚动条
NSLog(@”—-2–subviews = %@”,self.scrollView.subviews);
// 滚动条的样式
self.scrollView.indicatorStyle = UIScrollViewIndicatorStyleBlack;
// 惯性停下来的速度 靠自己的手验证
self.scrollView.decelerationRate = 0.1f;UIScrollView重点常见属性(contentOffset/contentSize/contentInset)
// 设置内容尺寸
self.scrollView.contentSize = imageView.image.size;
// 设置内容的偏移量
self.scrollView.contentOffset = CGPointMake(200, 200);
// 内边距
self.scrollView.contentInset = UIEdgeInsetsMake(20, 30, 40, 50);
3.delegate 代理(assign 弱引用)
1. 遵守协议
2. 成为代理
3. 实现代理方法
一般:
1. 代理的名称一般是控件的名称 + Delegate
UITextFieldDelegate,UITableViewDelegate,UIScrollViewDelegate,UIAlertViewDelegate
2. 代理需要实现的的方法一般都是代理名称 - UI - delegate
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath;
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex;
3. 成为代理
一般需要在A类中写代理方法,那么就让A类成为代理
遵守协议 - 写在.h文件中 (如果是需要当前控制器,那么就.m中遵守协议就可以了)
实现(你需要和必须实现的)代理方法
成为代理 scrollView.delegate(scrollView 的属性) = self
- scrollView的代理方法
// scrollView 正在滚动的时候调用 偏移量一直变化
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
// scrollView正在缩放
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
// 开始拖拽的时候调用
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;
// 即将停止拖拽的时候调用
- (void)scrollViewWillEndDragging:(UIScrollView )scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint )targetContentOffset NS_AVAILABLE_IOS(5_0);
// 已经停止拖拽调用
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;
// scrollView即将开始减速
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView;
// scrollView 停止减速 停止
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;
// scrollView 停止滚的的动画
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView;
// 在scrollView中 哪些控件是需要缩放的
- (UIView )viewForZoomingInScrollView:(UIScrollView )scrollView;
// scrollView即将开始缩放
- (void)scrollViewWillBeginZooming:(UIScrollView )scrollView withView:(UIView )view NS_AVAILABLE_IOS(3_2);
// scrollView结束缩放
- (void)scrollViewDidEndZooming:(UIScrollView )scrollView withView:(UIView )view atScale:(CGFloat)scale;
// scrollView 即将滚动到顶部
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView;
// scrollView 已经滚动到顶部
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView;
5.图片的缩放
1. 遵守协议
2. 成为代理
3. 实现代理方法
4. 在- (UIView )viewForZoomingInScrollView:(UIScrollView )scrollView 返回一个需要缩放的控件
5. 设置scrollView的最大和最小缩放比例
6. 用到的代理方法
以下方法中 view 就是正在缩放的控件
scale 缩放比例
- (void)scrollViewWillBeginZooming:(UIScrollView )scrollView withView:(UIView )view
- (void)scrollViewWillBeginZooming:(UIScrollView )scrollView withView:(UIView )view
6.UITextField 的代理方法、常见设置
1. 常见设置
// 数字键盘
textField.keyboardType = UIKeyboardTypeNumberPad;
// 改变键盘的右下角return 按钮的名称
textField.returnKeyType = UIReturnKeyDone;
2. 代理方法
// textField : A输入框发送改变 就把A输入框传入代理方法中
// range : 其实就是光标的位置 长度就是代表需要替换哪些字符串
// string : 输入的是什么就是什么
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
图片轮播器(涉及将定时器NSTimer 添加到 主线程中)
- 往scrollView 中添加imageView (5个),imageView的尺寸保持根scrollView的尺寸一致
- 设置分页 pagingEnabled = YES
- pageControl 在storyboard中 根 scrollView 同级
- 设置pageControl的一些属性 numberOfPages currentPage…
- 在scrollViewDidScroll代理方法中设置currentPage
使用x偏移量 / scrollView的宽度 + 0.5 “记得打印偏移量” - nextPage
- 获取pageControl的当前页 + 1 (跳到下一个) = index
- 判断index 是不是为 5 (如果是 index = 0)(循环切换)
- 设置偏移量(使用偏移量切换到下一个imageView)
index *width(scrollView)
定时器
- performSector
- NSTimer
self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0f target:self selector:@selector(nextPage:) userInfo:@”ceshi” repeats:YES];
timer是一次性 , 用了就不能再用了 - 添加timer到主线程
[[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
pragma mark - 定时器相关
(void)startTimer
{
// 返回一个自动开始执行任务的定时器
self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextPage:) userInfo:@”123” repeats:YES];// 修改NSTimer在NSRunLoop中的模式:NSRunLoopCommonModes
// 主线程不管在处理什么操作,都会抽时间处理NSTimer
[[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
}(void)stopTimer
{
[self.timer invalidate];
}
封装图片轮播器
- 类方法加载xib
- 先把 awakeFromNib
- pageControl的一次性操作
- 重写图片数组set方法
将控制器中viewDidLoad里面所有的代码除了 pageControl的一次性操作 - copy控制器中所有的方法
- 将报错的地方补上
使用scrollView做购物车
- 设置contentSize
拿出scrollView中的最后一个控件
算出这个空间的bottom = (控件的高 + 控件的y)
bottom 就是contentSize 的height - 设置contentOffset
首先判断最后一个控件的bottom 是不是比 scrollView的高度大
如果大 设置偏移量height 就 = bottom
- 设置contentSize
10
//layoutIfNeeded setNeedsDisplay
[self.view layoutIfNeeded]; //强制布局
[self setNeedsDisplay]; //重绘(刷帧)
11
//系统自带的button样式有自己的宽和高