UIScrollView语法用法样例

#import "RootViewController.h"

#define kScreenSize [UIScreen mainScreen].bounds.size
#define kPrintDebug NSLog(@"%s",__func__)

@interface RootViewController ()<UIScrollViewDelegate>
{
    
    UIScrollView *_scrollView;
}
@end

@implementation RootViewController
- (void)dealloc {
    [_scrollView release];
    [super dealloc];
}
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor lightGrayColor];
    [self creatScrollView];
}
/*
 
 - imageNamed:
 - imageWithContentsOfFile:
 区别:
 1.- imageNamed: 加载图片
    第一次 加载的时候 会把图片从app包内(手机磁盘) 加载到手机内存的缓存中,下次如果再加载相同的图片那么直接从缓存中加载,提高效率。但是缓存是有限的,app程序都要用到缓存,如果缓存低了那么直接影响app 运行效率。- imageNamed:方式加载的对象 是不释放的
    应用场合:加载小图片 (几kb 几十kb),少量图片
 
 2.- imageWithContentsOfFile: 加载图片
 每次调用都会从app包内(磁盘) 中 获取,用完之后 也会自动释放。但是相对于- imageNamed:加载效率低一些
 
 */

- (void)creatScrollView {
    
    
    //实例化一个滚动视图对象
    //内容 是可以滚动的
    _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 64, kScreenSize.width, kScreenSize.height-90)];
    
    //UIImage *image = [UIImage imageNamed: @"car4"];
    
    //获取图片在app包内的路径
    NSString *path = [[NSBundle mainBundle] pathForResource:@"girl" ofType:@"jpg"];
    UIImage *image = [UIImage imageWithContentsOfFile:path];
    //设置图片的真实大小
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, image.size.width, image.size.height)];
    imageView.image = image;
    //粘贴到滚动视图
    [_scrollView addSubview:imageView];
    [imageView release];
    
   //背景颜色
    _scrollView.backgroundColor = [UIColor redColor];
    
    //1.滚动视图的内容一般要大于 滚动视图的范围
    //2.设置 滚动视图的 滚动范围 (滚动范围 一般就是 内容的大小范围)
    // 滚动区域范围 > 滚动视图的范围
    
    //设置滚动视图的滚动区域范围(要想滚动必须设置滚动内容大小)
    _scrollView.contentSize = imageView.bounds.size;
    
    //设置回弹(默认可以回弹)
    _scrollView.bounces = YES;
    
    //显示或者隐藏 滚动条 默认显示
    _scrollView.showsHorizontalScrollIndicator = NO;//水平
    _scrollView.showsVerticalScrollIndicator = NO;//竖直
    //设置 是否可以滚动  NO禁用滚动
    //_scrollView.scrollEnabled = NO;
    
    //设置方向锁
    _scrollView.directionalLockEnabled = YES;//同时允许一个方向滚动
    
    //设置 内容 偏移量(相对于 粘到到滚动视图的位置滚动偏移)
    
    //如果偏移量CGPointMake(-50 ,-50) 内容会向 右 下偏移
    //如果偏移量CGPointMake(50 ,50)   内容会向 左 上偏移
    
    //_scrollView.contentOffset = CGPointMake(-50 ,-50);
    
    //点击状态栏是否可以滚动到内容视图的顶部
    _scrollView.scrollsToTop = YES;
    
    //设置缩放(必须设置代理 实现协议的方法)
    //实现- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
    _scrollView.minimumZoomScale = 0.5;
    _scrollView.maximumZoomScale = 2.0;
    
    //设置代理
    _scrollView.delegate = self;
    
    //self.view当前视图是RootViewVontroller,
    [self.view addSubview:_scrollView];
}
#pragma mark - UIScrollViewDelegate
//常用1
//当 缩放 滚动视图 的视图 通知代理 返回一个指定 内容视图
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    //返回需要缩放的视图地址
    //当前滚动视图中只有 一个 视图
    return scrollView.subviews[0];
}
//常用2
//手指 将要拖拽滚动视图的时候调用
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    kPrintDebug;
}
//常用3
//滚动视图滚动的时候调用 滚动的时候一直调用
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    //kPrintDebug;
    //CGPoint point = scrollView.contentOffset;
    //NSLog(@"偏移量:%@",NSStringFromCGPoint(point));
}
//常用4
//将要结束拖拽的时候调用
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
    kPrintDebug;
}
//常用5
//已经结束拖拽调用
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
    kPrintDebug;
}
//常用6
//将要开始 减速停止 的时候调用
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
    kPrintDebug;
}
//常用7
//已经 减速停止的时候调用
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    kPrintDebug;
}

//扩展
//将要开始 变形的时候调用
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view {
    kPrintDebug;
}
//变形过程中一直调用
- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
    kPrintDebug;
}
//变形结束的时候调用
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale {
    kPrintDebug;
}

//下面两个协议方法 有效 必须 设置滚动视图的_scrollView.scrollsToTop = YES;为yes

//_scrollView.scrollsToTop = YES;
//上面设置之后 可以通过 代理的协议的方法设置点击状态栏时候可以滚动顶部

//通过代理设置 点击状态栏是否可以滚动到顶部
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView {
    kPrintDebug;
    return YES;
}
//点击状态栏已经滚动到顶部
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView {
    kPrintDebug;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
@end
时间: 2024-08-08 13:01:27

UIScrollView语法用法样例的相关文章

NSDictionary 的用法样例

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) {     @autoreleasepool {         //1.实例化一个字典对象         /*          字典的元素 是任意的对象地址类型          元素 是键值对   key - value 必须一一对应 成对出现          最后 nil 作为结束          字典内容 是无序的 跟存放顺序无关

PHPCMS中GET标签概述、 get 标签语法、get 标签创建工具、get 调用本系统演示样例、get 调用其它系统演示样例

一.get 标签概述 通俗来讲,get 标签是Phpcms定义的能直接调用数据库里面内容的简单化.友好化代码,她可调用本系统和外部数据,仅仅有你对SQL有一定的了解,她就是你的绝世好剑!也就是适合熟悉SQL语句的人使用.有了她,我们打造个性化的站点,能很方便的调用出数据库里面指定的内容.通过条件限制,我们能够调用出不同条件下的不同数据. 二.get标签样式 {get dbsource=" " sql=" "} {/get} 三.get 标签语法 1.get标签属性值

Python线程的用法 函数式线程_thread和threading 样例

函数式线程写起来比较简单,但是功能没有threading那么高级,先来个函数式编程样例: #!/usr/bin/python #coding: utf-8 #————————————————————————函数式线程———————————————————————————————————————— #QQ496631085 小和 XiaoHe import _thread import time def print_time(threadName,delay): count = 0 while c

使用GPC分解多边形样例(Generic Polygon Clipper)

使用GPC分解多边形 (Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源) GPC: Generic Polygon Clipper GPC支持分解多边形.多边形求差集.交集,异或.并集 GPC_DIFF,                         /* Difference                        */ GPC_INT,                          /* Intersection    

Python word_cloud 样例 标签云系列(三)

转载地址:https://zhuanlan.zhihu.com/p/20436642word_cloud/examples at master · amueller/word_cloud · GitHub 上面是官方样例.这一篇里的大部分尝试都基于这些样例进行修改.前提是你已经完成了安装,依照上一篇修改了 FONT_PATH . 还记得 http://zhuanlan.zhihu.com/666666/20432734 里提到的中文分词方法吧,这次我们就不再赘述对文本的预处理了.有所不同的是,在

IronPython 个人网站样例----宝藏挖掘

IronPython for ASP.NET 的 CTP 已经发布两个多星期了,惭愧的是,因为工作繁忙,一直没有太多时间来学习.居然忽略了 Personal Web Site Starter Kit 的 IronPython 样例.幸亏了 Scott Guthrie 这篇博客:http://blog.joycode.com/scottgu/archive/2006/11/18/86737.aspx,才让我发现了这个宝库. 今天下午花了点时间学习了一下,收获不少.记录在这里. IronPython

[持续交付实践] pipelne:pipeline 使用之项目样例

项目说明 本文将以一个微服务项目的具体pipeline样例进行脚本编写说明.一条完整的pipeline交付流水线通常会包括代码获取.单元测试.静态检查.打包部署.接口层测试.UI层测试.性能专项测试(可能还有安全.APP等专项).人工验收等研发测试环节,还会包括灰度发布.正式发布等发布环节. 补充说明:1.此项目的部署还是使用传统虚拟机服务器的方式,暂未采用docker容器,docker容器与pipeline的结合后面会有其他专题进行说明.2.灰度发布.正式发布等发布环节,由于涉及到线上发布系统

关于peersim样例配置文件的超详细解读(新手勿喷)

相信很多兄弟一开始接触peersim,对配置文件还是有点不适应,我看了好久的样例的配置文件,一层层去找对应的文件的方法,终于好像悟懂了一点,记下来以后回顾. 贴上代码,一点点分析. 首先要说下所谓的配置文件,其实就是一个txt文件,语法也是非常简单,类似java里的给类里的变量赋值,这也正对应了配置文件的作用,配置文件,当然就是为实验的参数进行配置用的,所以配置文件的主要功能就是配置各类参数,定义一些协议类.控制类.初始化类以及一些常数. 1 # PEERSIM EXAMPLE 1 #配置文件中

java多线程样例

这里我们做一个完整的样例来说明线程产生的方式不同而生成的线程的差别: package debug; import java.io.*;import java.lang.Thread; class MyThread extends Thread{ public int x = 0; public void run(){ System.out.println(++x); }} class R implements Runnable{ private int x = 0; public void ru