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. URL最大长度问题

    在http协议中,其实并没有对url长度作出限制,往往url的最大长度和用户浏览器和Web服务器有关,不一样的浏览器,能接受的最大长度往往是不一样的,当然,不一样的Web服务器能够处理的最大长度的UR ...

  2. Git 推送和删除标签

    事实上Git 的推送和删除远程标签命令是相同的,删除操作实际上就是推送空的源标签refs:git push origin 标签名相当于git push origin refs/tags/源标签名:re ...

  3. [转贴] 2016一月12日起.NET 4, 4.5 and 4.5.1 停止安全更新、技术支持 or hotfix

    [转贴] 2016一月12日起.NET 4, 4.5 and 4.5.1 停止安全更新.技术支持 or hotfix https://www.dotblogs.com.tw/mis2000lab/20 ...

  4. JQuery笔录

    1.jQuery 的 hide() 函数,隐藏了 HTML 文档中所有的 <p> 元素.<script type="text/javascript">$(d ...

  5. JS中的toString()和valueOf()方法

    1.toString()方法:主要用于Array.Boolean.Date.Error.Function.Number等对象转化为字符串形式.日期类的toString()方法返回一个可读的日期和字符串 ...

  6. POJ 1631 Bridging signals(LIS的等价表述)

    把左边固定,看右边,要求线不相交,编号满足单调性,其实是LIS的等价表述. (如果编号是乱的也可以把它有序化就像Uva 10635 Prince and Princess那样 O(nlogn) #in ...

  7. POJ-3436 ACM Computer Factory---最大流+拆点

    题目链接: https://vjudge.net/problem/POJ-3436 题目大意: 每台电脑有p个组成部分,有n个工厂加工电脑.每个工厂对于进入工厂的半成品的每个组成部分都有要求,由p个数 ...

  8. 数据结构(C语言)分享笔记:数据结构的逻辑层次、存储层次

    [1] 严格意义上数据结构的概念 数据结构,一个简单的定义:相互之间存在一种或多种特定关系的数据元素的集合.即:数据结构 = 元素集合 + 元素间关系的集合 . 在讨论数据结构时,可以基于两个不同的层 ...

  9. tp5依赖注入(自动实例化):解决了像类中的方法传对象的问题

    app\index\Demo1.php namespace app\index\controller; /* 容器与依赖注入的原理 ----------------------------- 1.任何 ...

  10. confirm() 方法用于显示一个带有指定消息和 OK 及取消按钮的对话框。系统自带提示

    W3C地址:::::::   http://www.w3school.com.cn/jsref/met_win_confirm.asp http://www.w3school.com.cn/tiy/t ...