UI基础篇之UIScrollView

一、UIScrollView继承于UIView,它还有一个常用的子类UITableView;今天只介绍UIScrollView的基本使用:首先介绍一下它的几个常用属性,这里不做过多属性的介绍,有关其属性的相关信息可以command+鼠标左键,进入系统中自行查看

CGSize contentSize:用于设置滚动范围的,在创建一个UIScrollView对象之后,除了设置对象的frame还必须设置其滚动范围(CGSize contentSize);CGPoint contentOffSet:当前显示的范围;CGFloat minimumZoomScale:最小缩放最小比例(默认是1不进行缩放);CGFloat maximumZoomScale:最大缩放最小比例(默认是1不进行缩放);self.scrollView.showsHorizontalScrollIndicator = NO;//是否设置水平方向的滚动条;self.scrollView.showsVerticalScrollIndicator = NO;//是否设置垂直方向的滚动条等等;滚动所用的方法别忘记设置协议<UIScrollViewDelegate>

下面举了简单的例子:实现多张图片的滑动(添加了UIPageControl)及缩放,图片滑过之后尺寸自动还原。

AppDelegate.m文件中:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    self.window  = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    self.window.rootViewController = [[RootViewController alloc] init];
    return YES;
}
RootViewController.m

#import "RootViewController.h"
#import "RootView.h"

@interface RootViewController ()<UIScrollViewDelegate>
//自定义视图替换控制器自带的View,提升程序的灵活性、可移植性
@property (nonatomic, strong) RootView *rootView;

@end

@implementation RootViewController

-(void)loadView {
    //自定义视图替换控制器自带的View,提升程序的灵活性、可移植性
    self.rootView = [[RootView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.view = self.rootView;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    //给“scrollView”设置代理
    self.rootView.scrollView.delegate = self;
    //给pageControl添加方法
    [self.rootView.pageControl addTarget:self action:@selector(pageControlAction:) forControlEvents:UIControlEventValueChanged];
    //设置初始尺寸
    self.rootView.scrollView.zoomScale = 1;
    //给每一个“scroll”设置代理
    for (int i = 10; i < 15; i++) {
        UIScrollView *scroll = [self.rootView.scrollView viewWithTag:i];
        scroll.zoomScale = 1;
        scroll.delegate = self;
    }
}

//返回进行缩放的“scroll”
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    if (scrollView != self.rootView.scrollView) {
        return [scrollView.subviews objectAtIndex:0];
    }else
    return nil;
}
//设置pageControl,图片向后滑动一张,pageControl向后动一下
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    NSInteger index = scrollView.contentOffset.x / self.rootView.frame.size.width;
    self.rootView.pageControl.currentPage = index;
}
//上面pageControl方法的实现
- (void)pageControlAction:(UIPageControl *)sender {
    
    NSInteger index = self.rootView.pageControl.currentPage;
    CGPoint points = CGPointMake(index * self.rootView.frame.size.width, 0);

[UIView animateWithDuration:0.5 animations:^{
        self.rootView.scrollView.contentOffset = points;
    }];
}
//将划过的图片还原
-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
    if (scrollView == self.rootView.scrollView) {
       NSUInteger index = self.rootView.pageControl.currentPage;
        [[scrollView.subviews objectAtIndex:index] setZoomScale:1.0];
    }
}
//图片缩放后居中
-(void)scrollViewDidZoom:(UIScrollView *)scrollView {
    [scrollView.subviews objectAtIndex:0].center = self.rootView.center;
}
@end

RootView.h

#import <UIKit/UIKit.h>

@interface RootView : UIView

@property (nonatomic, strong) UIScrollView *scrollView;

@property (nonatomic, strong) UIPageControl *pageControl;

@end

RootView.m

#import "RootView.h"

@implementation RootView

-(instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        [self addAllViews];
    }
    return self;
}

- (void)addAllViews {
    //布局scrollView
    self.scrollView = [[UIScrollView alloc]initWithFrame:self.frame];
    self.scrollView.backgroundColor = [UIColor redColor];
    self.scrollView.pagingEnabled = YES;
    self.scrollView.minimumZoomScale = 0.2;
    self.scrollView.maximumZoomScale = 3;
    [self addSubview:self.scrollView];
    self.scrollView.contentSize = CGSizeMake(self.frame.size.width * 5, 0);
    //创建多个scrollView,每张图片对应一个scrollView,进行缩放时,对每个图片所在的scrollView进行缩放,
    for (int i = 0; i < 5; i++) {
        UIScrollView *scrollViews = [[UIScrollView alloc] initWithFrame:CGRectMake(i * self.frame.size.width, 0, self.frame.size.width, self.frame.size.height)];
        scrollViews.contentSize = CGSizeMake(self.frame.size.width, self.frame.size.height);
        scrollViews.tag = i + 10;
        scrollViews.minimumZoomScale = 0.2;
        scrollViews.maximumZoomScale = 3;

NSString *str = [NSString stringWithFormat:@"%d.jpg", i + 1];
        UIImageView *imageView = [[UIImageView alloc] init];
        imageView.frame = CGRectMake(0, 0, scrollViews.frame.size.width, scrollViews.frame.size.height);
        imageView.image = [UIImage imageNamed:str];

[scrollViews addSubview:imageView];
        [self.scrollView addSubview:scrollViews];
    }
    //布局pageControl
    self.pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, self.frame.size.height - 40, self.frame.size.width, 40)];
    self.pageControl.numberOfPages = 5;
    self.pageControl.backgroundColor = [UIColor grayColor];
    [self addSubview:self.pageControl];
    
}
@end

时间: 2024-10-14 14:04:37

UI基础篇之UIScrollView的相关文章

iOS UI基础-7.0 UIScrollView

概述 移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也相当有限.当展示的内容较多,超出一个屏幕时,用户可通过滚动手势来查看屏幕以外的内容,普通的UIView不具备滚动功能,不能显示过多的内容.UIScrollView是一个能够滚动的视图控件,可以用来展示大量的内容,并且可以通过滚动查看所有的内容 UIScrollView的常见属性 UIScrollView的常用代理方法 UIScrollView的缩放 UIScrollView使用 基本使用 UIScrollView的用法很简单,将

UI基础篇-iOS中简单图片浏览器的实现

1 // 2 3 // HYViewController.m 4 5 // 01-图片浏览器复习 6 7 // 8 9 // Created by apple on 15-4-10. 10 11 // Copyright (c) 2015年 apple. All rights reserved. 12 13 // 14 15 16 17 #import "HYViewController.h" 18 19 20 21 @interface HYViewController () 22

UI基础篇—loadView、viewDidLoad及viewDidUnload的关系

一.loadView 1.什么时候被调用? 每次访问UIViewController的view(比如controller.view.self.view)而且view为nil,loadView方法就会被调用. 2.有什么作用? loadView方法是用来负责创建UIViewController的view 3.默认实现是怎样的? 默认实现即[super loadView]里面做了什么事情. 1> 它会先去查找与UIViewController相关联的xib文件,通过加载xib文件来创建UIViewC

UI基础篇—iOS图片拉伸技巧

比如下面张图片,本来是设计来做按钮背景的:  button.png,尺寸为:24x60 现在我们把它用作为按钮背景,按钮尺寸是150x50: 1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 // 得到view的尺寸 5 CGSize viewSize = self.view.bounds.size; 6 7 // 初始化按钮 8 UIButton *button = [[UIButton alloc] init]; 9 // 设置尺寸 10

学习IOS开发UI篇--UI知识点总结(三) UIScrollView/UIPageControl/NSTimer

UIScrollView:常用属性 @property(nonatomic)   UIEdgeInsets     contentInset;               // default UIEdgeInsetsZero. add additional scroll area around content @property(nonatomic,getter=isPagingEnabled) BOOL   pagingEnabled;     // default NO. if YES,

swift篇第四期:闭包、UI基础、Protocol

首先来讲下闭包吧,其实闭包跟之前C中的block回调函数类似,但这里只研究了基础的使用,我在下面的两个VC中利用闭包做了通讯传值,也算是比较常用的方法吧,回头有时间我再研究下在项目中的其它应用   let sayHello = {     println("nihao") } sayHello() //定义一个闭包函数,与常规方法不同的是后面有个关键字in哦 let add = { (a: Int, b: Int) -> Int in     return a + b } //调

Qt入门之基础篇 ( 二 ) :Qt项目建立、编译、运行和发布过程解析

转载请注明出处:CN_Simo. 题解: 本篇内容主讲Qt应用从创建到发布的整个过程,旨在帮助读者能够快速走进Qt的世界. 本来计划是讲解Qt源码静态编译,如此的话读者可能并不能清楚地知道为何要静态编译,所以借此篇内容说明一下原由并为之后文章的学习做准备. 即使本片内容只是在围绕一个小小的HelloWorld程序开展,但还是希望朋友们不要急于求成,"欲速则不达". 文章整体思路: 我们循序渐进地来看,一个Qt应用的完成有以下一个重要的步骤: 项目创建->源码编译->程序运行

Spark性能优化指南——基础篇

前言 在大数据计算领域,Spark已经成为了越来越流行.越来越受欢迎的计算平台之一.Spark的功能涵盖了大数据领域的离线批处理.SQL类处理.流式/实时计算.机器学习.图计算等各种不同类型的计算操作,应用范围与前景非常广泛.在美团•大众点评,已经有很多同学在各种项目中尝试使用Spark.大多数同学(包括笔者在内),最初开始尝试使用Spark的原因很简单,主要就是为了让大数据计算作业的执行速度更快.性能更高. 然而,通过Spark开发出高性能的大数据计算作业,并不是那么简单的.如果没有对Spar

ios开发-UI基础-超级猜图

[注意]转载时请注明出处博客园-吃唐僧肉的小悟空http://www.cnblogs.com/hukezhu/ 本篇文章介绍一个比较综合的小应用----超级猜图. 功能分析: 根据显示的图片,在下面的待选项按钮中选中正确答案按钮,选中的按钮会显示在正确答案按钮中 答案错误,答案颜色变为红色,分数减小 答案正确,答案颜色变为蓝色,两秒自动跳入下一题,分数增加 点击"下一题"可以进入下一个题目 点击"大图",可以放大显示图片,再次点击图片或者背景,图片缩小至原来大小 点