UIScrollView

一、背景
1.移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也相当有限
2.当展示的内容较多,超出一个屏幕时,用户可通过滚动手势来查看屏幕以外的内容
3.普通的UIView不具备滚动功能,不适合显示过多的内容

二、作用
UIScrollView是一个能够滚动的视图控件,可以用来展示大量的内容,并且可以通过滚动查看所有的内容

三、使用方法
1.创建UIScrollView对象
2.添加要显示的内容
3.设置contentSize,即设置显示内容的大小
4.注意:无法滚动的原因
(1).没有设置显示内容的大小,没有设置contentSize
(2).视图被禁用了,scrollEnabled设为了NO
(3).没有接收到触摸事件,userInteractionEnabled设为了NO

四、属性
1.常见属性

//这个属性用来表示UIScrollView滚动的位置;其实就是内容左上角与scrollView左上角的间距值
//显示的内容在视图的左边或则上面值为正数,显示的内容在视图的右边或则下面值为负数
@property(nonatomic) CGPoint contentOffset; 

//这个属性用来表示UIScrollView内容的尺寸,即所能滚动的范围
@property(nonatomic) CGSize contentSize; 

//这个属性能够在UIScrollView的4周增加额外的滚动区域,一般用来避免scrollView的内容被其他控件挡住
@property(nonatomic) UIEdgeInsets contentInset; 

2.frame、contentOffset、contentSize、contentInset的关系图
注意:
a.最小的方框代表UIscrollView对象
b.中等的方框代表要显示的内容
c.最大的方框和中等方框之间的间距代表给内容增加的额外区域
关系

3.其他属性

@property(nonatomic,assign) id<UIScrollViewDelegate>    delegate; //设置代理

@property(nonatomic,getter=isDirectionalLockEnabled)    BOOL    directionalLockEnabled; //指定控件是否只能在一个方向上滚动 

@property(nonatomic)    BOOL    bounces; //是否有反弹效果 

@property(nonatomic)    BOOL    alwaysBounceVertical; //控制垂直方向遇到边框是否反弹

@property(nonatomic)    BOOL    alwaysBounceHorizontal; //控制水平方向遇到边框是否反弹   

@property(nonatomic,getter=isPagingEnabled) BOOL    pagingEnabled; //是否分页 

@property(nonatomic,getter=isScrollEnabled) BOOL    scrollEnabled; //是否能滚动

@property(nonatomic)    BOOL    showsHorizontalScrollIndicator; //是否显示水平方向的滚动条

@property(nonatomic)    BOOL    showsVerticalScrollIndicator; //是否显示垂直方向的滚动条

@property(nonatomic)    UIEdgeInsets    scrollIndicatorInsets; //指定滚动条在scrollerView中的位置

@property(nonatomic)    UIScrollViewIndicatorStyle  indicatorStyle; //设置滚动条的样式  

@property(nonatomic)    CGFloat decelerationRate NS_AVAILABLE_IOS(3_0); //改变scrollerView的减速点位置

@property(nonatomic,readonly,getter=isTracking) BOOL    tracking; //是否正在被跟踪 

@property(nonatomic,readonly,getter=isDragging) BOOL    dragging; //是否正在被拖拽

@property(nonatomic,readonly,getter=isDecelerating) BOOL decelerating; //是否正在减速 

@property(nonatomic)    BOOL    delaysContentTouches; //是否延时调用开始滚动的方法  

@property(nonatomic)    BOOL    canCancelContentTouches; //否接触取消touch的事件

@property(nonatomic)    BOOL    bouncesZoom; //缩放的时候是否会反弹

@property(nonatomic,readonly,getter=isZooming)       BOOL zooming; //是否正在缩放  

@property(nonatomic,readonly,getter=isZoomBouncing) BOOL    zoomBouncing; //是否正在进行缩放反弹

@property(nonatomic) BOOL  scrollsToTop; //是否能滚动到顶部 

五、ScrollView的代理
1.成为代理的方法
(1).遵守代理协议
(2).实现代理方法

2.内容缩放
(1).UIScrollView不仅能滚动显示大量内容,还能对其内容进行缩放处理,只要是控件就可以缩放
(2).缩放步骤
(a).设置UIScrollView的id delegate代理对象
(b).设置minimumZoomScale :缩小的最小比例
(c).设置maximumZoomScale :放大的最大比例
(d).让代理对象实现下面的方法,返回需要缩放的视图控件
- (UIView )viewForZoomingInScrollView:(UIScrollView )scrollView;

3.UIScrollView的代理

#import "ViewController.h"

@interface ViewController () <UIScrollViewDelegate>

@property (nonatomic,strong) UIScrollView *scrollView;

@property (nonatomic,strong) UIImageView *imageView;

@end

@implementation ViewController


- (void)viewDidLoad {
  [super viewDidLoad];

  //创建一个滚动视图
  self.scrollView = [[UIScrollView alloc] init];
  [self.view addSubview:self.scrollView];
  self.scrollView.frame = CGRectMake(40, 100, 285, 250);
  self.scrollView.backgroundColor = [UIColor orangeColor];
  //向ScrollView中添加一个ImageView
   self.imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed: @"minion"]];
  [self.scrollView addSubview:self.imageView];
  //设置scrollView的显示内容大小
  self.scrollView.contentSize = self.imageView.image.size;

  //设置控制器为代理
  self.scrollView.delegate =self;

  //设置缩放比例
  self.scrollView.maximumZoomScale = 2.5;
  self.scrollView.minimumZoomScale = 0.5;

}

#pragma  mark - <UIScrollViewDelegate>接口实现

//实时监控滑动
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

  NSLog(@"正在滑动");

}

//监听开始滑动
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {

  NSLog(@"开始滑动");

}

//监听结束滑动
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
  NSLog(@"结束滑动");
}

//监听:离开屏幕的时候,开始减速
-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
  NSLog(@"------开始减速");
}

//监听:有惯性的减速停止
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {

  NSLog(@"------减速停止");

}

#pragma mark 控件的缩放

 //这个方法的返回值决定了要缩放的内容(返回值只能是UIScrollView的子控件或间接子控件)
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
  return  self.imageView;
}

//正在缩放的时候调用
- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
  NSLog(@"缩放比例------%f",scrollView.zoomScale);
}

//缩放完毕的时候调用
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view {
  NSLog(@“********开始缩放");
}

@end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值