当前位置: 移动技术网 > 移动技术>移动开发>IOS > IOS 开发之查看大图的实现代码

IOS 开发之查看大图的实现代码

2019年07月24日  | 移动技术网移动技术  | 我要评论

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无法滚动的原因:

  1. 没有设置contentsize
  2. scrollenabled = no
  3. 没有接收到触摸事件:userinteractionenabled = no
  4. 没有取消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。

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网