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. Eucalyptus-instance启动后查看运行状态

    1.前言 在eucalyptus中通过虚拟机模板,创建并启动一个虚拟机,这个时候虚拟机启动正常,但是外部一直无法访问也ping不通,正对这种情况我们如何检查排除问题呢? 两种检查问题的方法: 1).在 ...

  2. 事件(Application Event)

    Spring的事件(Appllcation Event)为Bean与Bean之间的消息通信提供了支持.当一个Bean处理完一个任务后,希望另一个Bean知道并能做相应的处理,这种情况可以让另一个Bea ...

  3. (转载)office 2003 gaozhi.msi 缺失提示问题修复

    某些GHOST版win7,自带office 2003,每次启动word,它都会提示"稿纸没安装"云云,找不到那个文件.可是我搜遍了硬盘,确实没有那个文件.每次都要点取消,这个提示才 ...

  4. cms-帖子管理

    mapper: <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC & ...

  5. LeetCode Merge Two Sorted Lists 归并排序

      题意: 将两个有序的链表归并为一个有序的链表. 思路: 设合并后的链表为head,现每次要往head中加入一个元素,该元素要么属于L1,要么属于L2,可想而知,此元素只能是L1或者L2的首个元素, ...

  6. 如果CDN服务器出了问题,怎么做不影响自己的网站

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3.jquery.min.js"></ ...

  7. SwiftHN阅读器应用IOS源码

    SwiftHN是用Swift语言编写的Hacker News阅读器,同时采用了iOS 8最新的API. <ignore_js_op> <ignore_js_op> 详细说明:h ...

  8. World Wind Java开发之十二——加载粗制三维模型(ExtrudedPolygon)(转)

    ww可以根据DLG图批量生成假三维模型,这对于小区等特征相似的建筑物模型的构建是非常有用的.下面来看如何一步步实现假三维模型的加载: 1.Shp文件的制作 首先在arcmap下数字化几个建筑物,并新建 ...

  9. Excel如何显示隐藏列?

    我们在工作中遇到excel表格数据太多比较负责,同时字段太多需要隐藏一些不重要的字段方便阅读和分析其他数据那么我们如何取消隐藏数据呢?隐藏列比较简单选中点隐藏就可以了,取消隐藏需要一些小的技巧才能灵活 ...

  10. noip模拟赛#39

    昨晚打开的题想了一会发现都不会后决定慢慢想.然后早上开校会的时候莫名其妙的都想出来了... T1:m=100,ai=50000,i<=5.1到m的数每个数只能用一次,判断是否能够有这些数的某些数 ...