1、滚动显示图片

如果图片过大,则需要滚动显示,这是需要用到类UIScrollView,可是实现控件的水平和垂直滚动。

可用三步实现:1 设置UIScrollView,2 设置UIImageView,3 设置UIScrollView的滚动 范围。

 - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. // 1、添加 scrollView,并设置可视范围
UIScrollView *scrollView = [[UIScrollView alloc] init];
scrollView.frame = CGRectMake(, , , ); // 可视范围
scrollView.backgroundColor = [UIColor grayColor];
[self.view addSubview:scrollView]; // 2、添加imageView
UIImageView *imageView = [[UIImageView alloc] init];
imageView.image = [UIImage imageNamed:@"1.jpg"];
CGSize imageSize = imageView.image.size;
imageView.frame = CGRectMake(, , imageSize.width, imageSize.height); [scrollView addSubview:imageView]; // 3、设置滚动范围
scrollView.contentSize = imageView.image.size;
}

2、其他属性设置

     // 其他属性
// 是否显示滚动条
//scrollView.showsHorizontalScrollIndicator = NO;
// 弹簧效果
//scrollView.bounces = NO;
// 额外显示区域 top left bottom right
//scrollView.contentInset = UIEdgeInsetsMake(20, 20, 20, 20);

3、移动图片

添加四个按钮表示上下左右,通过按钮的tag来区分按钮。这里是使用3.5存得屏幕,分辨率大小固定,所以暂使用320*480。

给按钮绑定事件,然后实现方法如下:

 // 上下左右移动
- (IBAction)allBtn:(UIButton *)sender
{
[UIView animateWithDuration:1.0 animations:^{
NSInteger btnTag = sender.tag;
CGPoint point = _scrollView.contentOffset; switch (btnTag) {
case : // 上
point.y -= ;
if (point.y < ) {
point.y = ;
}
break;
case : // 下
point.y += ;
if(point.y > )
{
point.y = ;
}
break;
case : // 左
point.x -= ;
if(point.x < )
{
point.x = ;
} break;
case : // 右
point.x += ;
if(point.x > )
{
point.x = ;
}
break;
default:
break;
} _scrollView.contentOffset = point; }];
}

4、缩放图片

缩放图片简单流程:

1、设置代理 delegate

2、遵守协议 UIScrollViewDelegate

3、设置缩放比例 minimumZoomScale,maxmumZoomScale

4、实现缩放方法 viewForZoomingInScrollView

  4、1、设置代理 delegate

     _scrollView.delegate = self; // 指向控制器

  4、2、遵守协议 UIScrollViewDelegate

 @interface ViewController () <UIScrollViewDelegate> // 遵守协议

 {
UIScrollView *_scrollView;
UIImageView *_imageView;
}
@end

  4、3、设置缩放比例 minimumZoomScale,maxmumZoomScale

     // 设置缩放比例
scrollView.maximumZoomScale = 2.0;
scrollView.minimumZoomScale = 0.2;

  4、4、实现缩放方法 viewForZoomingInScrollView

 // 图片缩放,代理方法
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return _imageView; // 返回缩放对象
}

代码

 //
// ViewController.m
// UIScrolleView-大图片
//
// Created by Christian on 15/5/26.
// Copyright (c) 2015年 slq. All rights reserved.
// #import "ViewController.h" @interface ViewController () <UIScrollViewDelegate> {
UIScrollView *_scrollView;
UIImageView *_imageView;
}
@end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. // 1、添加 scrollView,并设置可视范围
UIScrollView *scrollView = [[UIScrollView alloc] init];
//scrollView.frame = CGRectMake(0, 0, 250, 250); // 可视范围
scrollView.frame = self.view.bounds;
scrollView.backgroundColor = [UIColor grayColor];
[self.view addSubview:scrollView]; // 2、添加imageView
UIImage *image = [UIImage imageNamed:@"1.jpg"];
_imageView= [[UIImageView alloc] initWithImage:image];
// CGSize imageSize = imageView.image.size;
// imageView.frame = CGRectMake(0, 0, imageSize.width, imageSize.height);
//
[scrollView addSubview:_imageView]; // 3、设置滚动范围
scrollView.contentSize = _imageView.image.size; // 其他属性
// 是否显示滚动条
//scrollView.showsHorizontalScrollIndicator = NO;
// 弹簧效果
//scrollView.bounces = NO;
// 额外显示区域 top left bottom right
//scrollView.contentInset = UIEdgeInsetsMake(20, 20, 20, 20); // 获得当前显示区域位于图片的位置,左上角坐标
// scrollView.contentOffset = CGPointEqualToPoint(0, 0);
_scrollView = scrollView; // 缩放图片,要遵守协议 UIScrollViewDelegate
_scrollView.delegate = self;
// 设置缩放比例
scrollView.maximumZoomScale = 2.0;
scrollView.minimumZoomScale = 0.2;
} // 上下左右移动
- (IBAction)allBtn:(UIButton *)sender
{
[UIView animateWithDuration:1.0 animations:^{
NSInteger btnTag = sender.tag;
CGPoint point = _scrollView.contentOffset; switch (btnTag) {
case : // 上
point.y -= ;
if (point.y < ) {
point.y = ;
}
break;
case : // 下
point.y += ;
if(point.y > )
{
point.y = ;
}
break;
case : // 左
point.x -= ;
if(point.x < )
{
point.x = ;
} break;
case : // 右
point.x += ;
if(point.x > )
{
point.x = ;
}
break;
default:
break;
} _scrollView.contentOffset = point; }];
}
// 图片缩放,代理方法
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return _imageView;
} @end

源代码: http://pan.baidu.com/s/1o6FXo4E

5、分页

  5、1、少量图片展示

如图所示,少量图片的分页,可以使用以上方式,直接创建一个scrollView和多个imageView。按照顺序将iamgeView添加到scrollView,每次滚动时只需改变scrollView的contentOffset属性就可以显示不同的图片.

可再viewDidLoad中添加如下代码,有5张图片用来显示

     CGFloat w = _scrollView.frame.size.width;
CGFloat h = _scrollView.frame.size.height;
for (int i = ; i < kCount; i ++)
{
UIImageView *imageView = [[UIImageView alloc] init];
// 1、按照顺序添加图片,y值相同,x值递增
imageView.frame = CGRectMake(i * w, , w, h); NSString *imageName = [NSString stringWithFormat:@"%d.jpg",i+];
imageView.image = [UIImage imageNamed:imageName]; [_scrollView addSubview:imageView]; }
// 隐藏水平滚动条
_scrollView.showsHorizontalScrollIndicator = NO;
// 2、启用分页
_scrollView.pagingEnabled = YES;
// 3、设置滚动范围,宽高
_scrollView.contentSize = CGSizeMake(kCount * w, );

6、UIPageControl控件

左右滑动,会显示当前页的位置,使用方式如下:

     // page control控件
// 1、初始化一个pageControl
_pageControl = [[UIPageControl alloc] init];
// 2、设置frame
_pageControl.center = CGPointMake(w * 0.5, h - );
_pageControl.bounds = CGRectMake(, , , );
// 3、设置页数
_pageControl.numberOfPages = kCount;
// 4、设置选中页的颜色
_pageControl.currentPageIndicatorTintColor = [UIColor redColor];
// 5、关闭点击小按钮附近的翻页功能
_pageControl.enabled = NO;
// 6、代理方法中实现滚动页码的改变 // 7、添加到view
[self.view addSubview:_pageControl];

代理方法中实现定位到当前页

 // 正在滚动时调用
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{ int page = scrollView.contentOffset.x / scrollView.frame.size.width;
//NSLog(@"scrolling:%d",page);
// 6、设置当前页码
_pageControl.currentPage = page;
}

7、键盘处理

新建几个text field 控件,可以设置控件的属性keyboard type 为所需类型

 - (IBAction)exitKeyboard
{
// 方法1:谁调出键盘,谁负责退出键盘,比较麻烦,需要各自退出
//[_nameText resignFirstResponder]; // 方法2:退出所有view的子控件的键盘
[self.view endEditing:YES]; }

推荐使用方法2

给键盘添加一个ToolBar,其中toolBar通过xib文件创建

 - (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. UIToolbar *toolbar = [[NSBundle mainBundle] loadNibNamed:@"keyboard" owner:nil options:nil][];
// 将toolbar显示到键盘顶部
_nameText.inputAccessoryView = toolbar;
_phoneText.inputAccessoryView = toolbar;
_birthdayText.inputAccessoryView = toolbar;
_addressText.inputAccessoryView = toolbar;
}

8、MVC模式

主要三者之间的关系:控制器负责通信,控制器可以访问模型,模型不可访问控制器。视图可以访问控制器,控制器也可以访问视图。视图和模型之间不存在访问关系。

IOS开发学习笔记033-UIScrollView的更多相关文章

  1. iOS开发学习笔记:基础篇

    iOS开发需要一台Mac电脑.Xcode以及iOS SDK.因为苹果设备都具有自己封闭的环境,所以iOS程序的开发必须在Mac设备上完成(当然,黑苹果应该也是可以的,但就需要花很多的精力去折腾基础环境 ...

  2. ios开发学习笔记(1)

    objective-c基础总结 第一二章 1.application:didiFinishLauchingWithOptions:程序启动后立即执行 2.启动界面代码格式:self.window = ...

  3. iOS开发学习笔记

    1 常用的第三方工具 1.1 iPhone Simulator 测试程序需要模拟器iPhone Simulator 1.2 设计界面需要Interface Builder,Interface Buil ...

  4. ios开发学习笔记(这里一定有你想要的东西,全部免费)

    1,Search Bar 怎样去掉背景的颜色(storyboard里只能设置background颜色,可是发现clear Color无法使用). 其实在代码里还是可以设置的,那就是删除背景view [ ...

  5. IOS开发学习笔记017-第一个IOS应用

    第一个IOS应用程序,就从最简单的开始吧. 1.先了解一下开发环境,Xcode的相关组成 2.还有模拟器 3.运行与停止按钮 4.新建一个工程 5.看看main函数里都有啥 6.现在来添加一个控件 1 ...

  6. (ios开发学习笔记一)ios项目文件结构

    转自:http://www.cnblogs.com/macroxu-1982/archive/2012/07/31/2616389.html 下面是单个窗体项目例子,我们从这个项目开始,说明ios项目 ...

  7. iOS开发学习--纯代码 UIScrollView 无限循环的实现——代码类封装

    一个简单的利用UIScrollView 实现的无线滚动banner,下面的代码实现,因为封装问题,对两个及一下的view 支持出了一点问题(view是传参进来的,不可以生成两份),但是原理是正确的,智 ...

  8. ios开发学习笔记040-autolayout 第三方框架Masonry

    不管是是界面创建约束还是代码创建约束,苹果官方提供的方式都比较繁琐.所以出现了第三方框架. Masonry 在github地址如下: https://github.com/SnapKit/Masonr ...

  9. IOS开发学习笔记036-UIScrollView-循环自动滚动

    实现scrollView的自动循环滚动,需要实现几个方法. 其中scrollView中始终保存三张图片,其他的图片在滚动到时再进行加载. 循环的实现主要是在setUpdate 中,如果索引为0是第一个 ...

  10. IOS开发学习笔记035-UIScrollView-自动滚动

    让图片自动滚动的话,需要使使用定时器,循环计算当前页的页码.并且在拖动图片时停止计时器,停止拖动时启动计时器. 定时器 方法1: performSelector [self performSelect ...

随机推荐

  1. 【Shell脚本学习22】Shell 函数:Shell函数返回值、删除函数、在终端调用函数

    函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高.像其他编程语言一样,Shell 也支持函数.Shell 函数必须先定义后使用. Shell 函数的定义格式如下: f ...

  2. Angular ui-route介绍

    参考博客: https://www.cnblogs.com/haogj/p/4885928.html 原文地址:http://www.ng-newsletter.com/posts/angular-u ...

  3. javascript字符串格式化string.format

    String.prototype.format = function () { var values = arguments; return this.replace(/\{(\d+)\}/g, fu ...

  4. HDU3371 Connect the Cities

    题目描述: 有n个小岛,其中有的小岛之间没有通路,要修这样一条通路需要花费一定的钱,还有一些小岛之间是有通路的.现在想把所有的岛都连通起来,求最少的花费是多少. 输入: 第一行输入T,代表多少组数据. ...

  5. 详解Unity 4.6新UI的布局

    本文所讲的是Unity 4.6中新加入的uGUI,官方称Unity UI,而不是过去的OnGUI式的旧UI(官方称Legacy GUI). 我曾经在8月份对照4.6 Beta的文档写过一篇笔记学习Un ...

  6. PPII打不开 更改I.bat

    http://jingyan.baidu.com/article/3a2f7c2e7d277126afd6118d.html

  7. Repeater控件里面取不到CheckBox的值

    然后在后台需要取到,选中了那些 然后在后台怎么取也取不到,当时就纳闷了,然后开始怀疑自己的代码是不是错了,经过仔细一看,我的妈呀,加载事件了差一句话......整个人都不好了 加载事件差这句话不行,补 ...

  8. 方法 -------JavaScript

    本文摘要:http://www.liaoxuefeng.com/ 在一个对象中绑定函数,称为这个对象的方法. 在JavaScript的中,对象的定义是这样的: var xiaoming = { nam ...

  9. c#基础之循环探索

    前言在学习基础的语法中循环控制是程序语句控制中的一种,循环在很多的操作中都有应用,例如在获得数据库中的查询的数据之后可以用循环遍历的方式拿到每一行的数据,从而拿到每一个单元格的数据,在文件的操作中也大 ...

  10. mysql 5.7安装步骤:

    .下载完成后解压: 3.在mysql要目录下创建 my.ini 文件,如上图,文件内容如下,basedir 和 datadir 修改为相应地址: [mysql] # 设置mysql客户端默认字符集 d ...