欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-12-18 10:38:40
ios 开发之查看大图的实现代码 本项目是取自传智播客的教学项目,加入笔者的修改和润饰。 1. 项目名称:查看大图 2. 项目截图展示 3. 项目功能...

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

本项目是取自传智播客的教学项目,加入笔者的修改和润饰。

1. 项目名称:查看大图

2. 项目截图展示

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

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。

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

上一篇:

下一篇: