年年有"余"

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11655|回复: 4

[实用控件] ios实战开发之UIScrollView图片浏览器

[复制链接]
  • TA的每日心情

    2024-10-15 10:05
  • 签到天数: 372 天

    [LV.9]以坛为家II

    发表于 2014-3-31 10:13:17 | 显示全部楼层 |阅读模式
    1、效果演示



    2、基本说明

    2.1 创建一个UIImageView显示背影图片(可选);2.2 创建一个UIScrollView,大小与self.view相等,可以使用storyboard画,设置为当前控制器属性(连线IBOuylet);
    2.3 给scrollView添加多张图片,并将这些图片从左到右一字排开(按规律设置x值);
    2.4 设置scrollView的展示区域(contentSize)及相关配置,如滑动条是否显示等;
    2.5 开启scrollView的pagingEnable功能,使得滑动图片时能自动分页展示;
    2.6 添加UIPageControl控件,并设置基本属性(大小、位置、颜色等);
    2.7 设置scrollView的代理为当前控制器--让当前控制器遵守相关协议--在当前控制器中实现协议中的相关方法;
    2.8 通过监听scrollView滑动,动态修改pageControl中当前页码,使得pageControl与当前图片一一对应;

    3、关键代码

    SAViewControl.h
    1. //
    2. //  SAViewController.h
    3. //  UIScrollView
    4. //
    5. //  Created by yusian on 14-3-30.
    6. //  Copyright (c) 2014年 yusian. All rights reserved.
    7. //
    8. #import <UIKit/UIKit.h>
    9. @interface SAViewController : UIViewController
    10. @property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
    11. @end
    复制代码
    SAViewControl.m
    1. //
    2. //  SAViewController.m
    3. //  UIScrollView
    4. //
    5. //  Created by yusian on 14-3-30.
    6. //  Copyright (c) 2014年 yusian. All rights reserved.
    7. //
    8. #import "SAViewController.h"
    9. #define kCount 9
    10. @interface SAViewController () <UIScrollViewDelegate>
    11. {
    12.     UIPageControl *_pageControl;
    13. }
    14. @end
    15. @implementation SAViewController
    16. - (void)viewDidLoad
    17. {
    18.     [super viewDidLoad];
    19.    
    20.     // 创建几个临时变量,尽量避免直接赋值写数字,考虑ios6、7的兼容性
    21.     CGFloat height = self.view.frame.size.height;   // view的高度
    22.     CGFloat width = self.view.frame.size.width;     // view的宽度
    23.     CGRect tempF = CGRectMake(0, 0, width, height);
    24.     self.scrollView.frame = tempF;  // scrollView的宽高与view保持一致
    25.     CGFloat y = self.scrollView.frame.origin.y;     // scrollView的y值
    26.    
    27.     // 通过一个for循环创建多张图片并加入到scrollView,并将图片从左到右一字排开
    28.     for (int i = 0; i < kCount; i++ ) {
    29.    
    30.         UIImageView *imageView = [[UIImageView alloc] init];    // 创建UIImageView
    31.         [self.scrollView addSubview:imageView];     // 添加到scrollView
    32.         
    33.         // 图片文件名分别为001~009.jpg,图片位置一字排开,所以宽/高/y值都相等,x值从左到右分别相差一个图片宽度
    34.         NSString *imgName = [NSString stringWithFormat:@"%03d.jpg", i + 1];
    35.         imageView.image = [UIImage  imageNamed:imgName];
    36.         imageView.frame = CGRectMake(width * i, y, width, height);
    37.     }
    38.    
    39.     // 设置scrollView的属性
    40.     self.scrollView.contentSize = CGSizeMake(width * kCount, 0);    //内容总宽度为9张图片宽度和,高度不变
    41.     self.scrollView.showsHorizontalScrollIndicator = NO;    // 不显示横向滑动条
    42.     self.scrollView.pagingEnabled = YES;    // 以一个scrollView展示区域大小自动分块显示,实现翻页效果
    43.     [self.view addSubview:_scrollView];     // 将scrollView添加到view
    44.    
    45.     // 页码控件器相关属性(在这里主要展示为页码显示功能)
    46.     _pageControl = [[UIPageControl alloc] init];
    47.     [self.view addSubview:_pageControl];
    48.    
    49.     _pageControl.center = CGPointMake(width *0.5, height - 20);     // 位置
    50.     _pageControl.bounds = CGRectMake(0, 0, width, 20);      // 大小
    51.     _pageControl.numberOfPages = kCount;    // 页数
    52.     _pageControl.currentPageIndicatorTintColor = [UIColor redColor];    // 当前页高亮颜色
    53.     _pageControl.enabled = NO;  // 关掉相关控制功能,只显示效果
    54.    
    55.     self.scrollView.delegate = self;
    56.     // 设置scrollView的代理为当前控制器(SAViewController),当前控制器需要满足以下条件
    57.     //  1、遵守UIScrollViewDelegate协议
    58.     //  2、实现监听scrollView的某些方法,比如缩放、滚动等动作
    59. }
    60. // 监听滚动时的事件
    61. - (void)scrollViewDidScroll:(UIScrollView *)scrollView
    62. {
    63.     // 滚动scrollView时取contentOffset属性,通过计算可以得到当处于第几张图片
    64.     int currentPage = self.scrollView.contentOffset.x / self.scrollView.frame.size.width;
    65.     // 将该值赋值给pageControl的currentPage属性,可实现动态显示当前页码
    66.     _pageControl.currentPage = currentPage;
    67. }
    68. @end
    复制代码
    4、源代码下载
    下载链接:
    游客,本帖隐藏的内容需要积分高于 1 才可浏览,您当前积分为 0


    5、参考链接
    ios实战开发之xib基本介绍


    该用户从未签到

    发表于 2014-12-12 14:11:42 | 显示全部楼层
    站长费心了,这么详细的教程,让新手很方便

    该用户从未签到

    发表于 2015-1-9 16:19:13 | 显示全部楼层
    这个源码的链接貌似有点儿问题啊。。。
  • TA的每日心情
    高兴
    2015-10-10 10:21
  • 签到天数: 44 天

    [LV.5]常住居民I

    发表于 2015-6-15 16:11:19 | 显示全部楼层
    这个功能非常实用
  • TA的每日心情

    2024-10-15 10:05
  • 签到天数: 372 天

    [LV.9]以坛为家II

     楼主| 发表于 2015-6-15 17:53:22 | 显示全部楼层
    lihaitao 发表于 2015-1-9 16:19
    这个源码的链接貌似有点儿问题啊。。。

    有什么问题?
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|小黑屋|Archiver|iOS开发笔记 ( 湘ICP备14010846号 )

    GMT+8, 2024-11-24 08:20 , Processed in 0.051507 second(s), 23 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表