IOS 开发之查看大图的实现代码
程序员文章站
2023-12-18 10:38:40
ios 开发之查看大图的实现代码
本项目是取自传智播客的教学项目,加入笔者的修改和润饰。
1. 项目名称:查看大图
2. 项目截图展示
3. 项目功能...
ios 开发之查看大图的实现代码
本项目是取自传智播客的教学项目,加入笔者的修改和润饰。
1. 项目名称:查看大图
2. 项目截图展示
3. 项目功能
- 左右滑动查看图片
- 支持缩放功能
- 点击中间按钮移动图片
4. 项目代码
#import "viewcontroller.h" @interface viewcontroller ()<uiscrollviewdelegate> @property (strong, nonatomic) iboutlet uiscrollview *scrollview; @property (weak, nonatomic) iboutlet uiimageview *imageview; @end @implementation viewcontroller - (void)viewdidload { [super viewdidload]; // 设置内容尺寸 self.scrollview.contentsize = self.imageview.frame.size; // 设置 self.scrollview.delegate = self; // 设置最大和最小的缩放比例 self.scrollview.maximumzoomscale = 2.0; self.scrollview.minimumzoomscale = 0.2; // 设置边距 self.scrollview.contentinset = uiedgeinsetsmake(20, 20, 20, 20); // 不显示水平滚动标示 self.scrollview.showshorizontalscrollindicator = no; // 不显示垂直滚动标示 self.scrollview.showsverticalscrollindicator = no; // 偏移位置 self.scrollview.contentoffset = cgpointmake(0, -100); // 取消弹簧效果 self.scrollview.bounces = no; //设置按钮 uibutton *btn = [uibutton buttonwithtype:uibuttontypecontactadd]; btn.center = self.view.center; [self.view addsubview:btn]; //设置按钮的监听方法 [btn addtarget:self action:@selector(click) forcontrolevents:uicontroleventtouchupinside]; } // 移动大图的偏移位置 - (void)click { //取出offset cgpoint offset = self.scrollview.contentoffset; offset.x += 20; offset.y += 20; // 更新contentoffset self.scrollview.contentoffset = offset; } #pragma mark - uiscrollview的代理方法 // 1> scrollview要知道缩放谁 /** * 当用户开始拖拽scrollview时就会调用 */ - (void)scrollviewwillbegindragging:(uiscrollview *)scrollview { nslog(@"开始拖拽"); } /** * 只要scrollview正在滚动,就会调用 */ - (void)scrollviewdidscroll:(uiscrollview *)scrollview { nslog(@"正在滚动%@", nsstringfromcgpoint(scrollview.contentoffset)); } /** * 当用户使用捏合手势的时候会调用 * * @return 返回的控件就是需要进行缩放的控件 */ - (uiview *)viewforzoominginscrollview:(uiscrollview *)scrollview { nslog(@"开始缩放"); return self.imageview; } /** * 正在缩放的时候会调用 */ - (void)scrollviewdidzoom:(uiscrollview *)scrollview { nslog(@"正在缩放"); } @end
5. 本项目必须掌握的代码段
设置外边距
self.scrollview.contentinset = uiedgeinsetsmake(20, 20, 20, 20);
结合类型创建按钮
uibutton *btn = [uibutton buttonwithtype:uibuttontypecontactadd];
移动scroll内容的offset
- (void)click { cgpoint offset = self.scrollview.contentoffset; offset.x += 20; offset.y += 20; self.scrollview.contentoffset = offset; }
6. 笔记
scrollview无法滚动的原因:
- 没有设置contentsize
- scrollenabled = no
- 没有接收到触摸事件:userinteractionenabled = no
- 没有取消autolayout功能(如果在storyboard中添加了scrollview的子控件,要想scrollview滚动,必须取消autolayout)
scrollview的属性
@property(nonatomic) uiedgeinsets contentinset;
这个属性能够在uiscrollview的4周增加额外的滚动区域 @property(nonatomic) cgpoint contentoffset; 这个属性用来表示uiscrollview滚动的位置 @property(nonatomic) cgsize contentsize; 这个属性用来表示uiscrollview内容的尺寸,滚动范围(能滚多远) @property(nonatomic) bool bounces; 设置uiscrollview是否需要弹簧效果 @property(nonatomic,getter=isscrollenabled) bool scrollenabled; 设置uiscrollview是否能滚动 @property(nonatomic) bool showshorizontalscrollindicator; 是否显示水平滚动条 @property(nonatomic) bool showsverticalscrollindicator; 是否显示垂直滚动条
什么时候需要scrollview的代理?
当我们想在uiscrollview正在滚动 或 滚动到某个位置 或者 停止滚动 时做一些特定的操作的时候,我们需要能够监听到uiscrollview的整个滚动过程。
也就是说,要想监听uiscrollview的滚动过程,就必须先给uiscrollview设置一个代理对象(控制器),然后通过代理得知uiscrollview的滚动过程。
uiscrollview将delegate需要实现的方法(监听scrollview的方法)都定义在了uiscrollviewdelegate协议中,因此要想成为uiscrollview的delegate,必须遵守uiscrollviewdelegate协议,然后实现协议中相应的方法,就可以监听uiscrollview的滚动过程了。
一般情况下,就设置uiscrollview所在的控制器 为 uiscrollview的delegate。
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!