iOS学习笔记——第六天

iOS学习笔记——第六天

今日学习概述

今天主要进行iOS开发中经常被用到的UIScrollView控件的学习,包括其基本使用、常见属性、代理的注意点等。

什么是UIScrollView
  • 移动设备的屏幕大小是及其有限的,因此直接展示在用户眼前的内容也相当有限。
  • 当展示的内容较多,超出一个屏幕时,用户可以通过滚动手势来查看屏幕以外的内容。
  • 普通的UIView不具备滚动功能,不适合显示过多内容。
  • UIScrollView是一个能够滚动的视图控件,可以用来展示大量的内容,并且可以通过滚动查看所有的内容。
利用UIScrollView显示一张大图片
//1.创建一个UIScrollView
    UIScrollView *scrollView = [[UIScrollView alloc] init];
    scrollView.frame = CGRectMake(100, 100, 200, 200);
    scrollView.backgroundColor = [UIColor yellowColor];
    [self.view addSubview:scrollView];
    
    //2.创建一个UIImageView
    UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"IMG_0420"]];
    
    //3.加入到scrollView中
    [scrollView addSubview:imageView];
    
    //4.设置scrollView的contentSize
    scrollView.contentSize = imageView.frame.size;

效果图为
在这里插入图片描述

UIScrollView无法滚动的原因
  • 没有设置contentSize
  • scrollEnabled = NO
  • userInteractionEnabled = NO
UIScrollView的重要属性
  1. contentOffset(内容的偏移量)
    作用:控制内容滚动的位置;得知内容滚动的位置。
    注:偏移量是scrollview的x(y)值减去contentsize的x(y)值。偏移量越大,越往左上角靠。

  2. contentInset (内边距)

代理
  1. 任何OC对象都可以作为scrollView的代理。
  2. 苹果设计的代理属性为什么是weak——防止循环引用,内存泄漏。
    在这里插入图片描述
  3. 代理是用来监听控件的某些行为。
利用UIScrollView实现内容缩放
#import "ViewController.h"
@interface ViewController () <UIScrollViewDelegate>
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (weak, nonatomic) UIImageView *imageView;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //1.创建UIImageView
    UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"IMG_0420"]];
    [self.scrollView addSubview:imageView];
    
    //2.设置contentsize
    self.scrollView.contentSize = imageView.frame.size;
    
    //3.设置最小,最大缩放量
    self.scrollView.minimumZoomScale = 0.5;
    self.scrollView.maximumZoomScale = 3.0;
    
    self.scrollView.delegate = self;
    self.imageView = imageView;
}

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
    return self.imageView;
}

@end

效果图为
在这里插入图片描述

UIScrollView分页功能
#import "ViewController.h"

@interface ViewController ()<UIScrollViewDelegate>
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (weak, nonatomic) IBOutlet UIPageControl *pageControl;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.scrollView.delegate = self;
    CGFloat scrollViewW = self.scrollView.frame.size.width;
    CGFloat scrollViewH = self.scrollView.frame.size.height;
    
    //1.添加图片
    int count = 5;
    for (int i = 0; i<count; i++) {
        UIImageView *imageView = [[UIImageView alloc] init];
        imageView.frame = CGRectMake(i * scrollViewW, 0, scrollViewW, scrollViewH);
        NSString *name = [NSString stringWithFormat:@"img_%d",i];
        imageView.image = [UIImage imageNamed:name];
        
        [self.scrollView addSubview:imageView];
    }
    
    //2.设置contentsize
    self.scrollView.contentSize = CGSizeMake(5 * scrollViewW, scrollViewH);
    
    //3.设置滚动条为不可见
    self.scrollView.showsVerticalScrollIndicator = NO;
    self.scrollView.showsHorizontalScrollIndicator = NO;
    
    //4.开启分页功能
    self.scrollView.pagingEnabled = YES;
    
    //5.设置总页数
    self.pageControl.numberOfPages = count;
    
    //6.单页时隐藏pageContrl
    self.pageControl.hidesForSinglePage = YES;
    
}

#pragma mark - UIScrollViewDelegate

- (void) scrollViewDidScroll:(UIScrollView *)scrollView
{
    //1.计算页码
    int page = (int)(scrollView.contentOffset.x / scrollView.frame.size.width + 0.5);
    //2.设置页码
    self.pageControl.currentPage = page;
    
}

@end

效果图为
在这里插入图片描述

NSTimer定时器

一般来说会有这样的需求:要求图片自动播放,这时候就需要用到NSTimer。

#import "ViewController.h"

@interface ViewController ()<UIScrollViewDelegate>
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (weak, nonatomic) IBOutlet UIPageControl *pageControl;
@property (nonatomic, strong) NSTimer *timer;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.scrollView.delegate = self;
    CGFloat scrollViewW = self.scrollView.frame.size.width;
    CGFloat scrollViewH = self.scrollView.frame.size.height;
    
    //1.添加图片
    int count = 5;
    for (int i = 0; i<count; i++) {
        UIImageView *imageView = [[UIImageView alloc] init];
        imageView.frame = CGRectMake(i * scrollViewW, 0, scrollViewW, scrollViewH);
        NSString *name = [NSString stringWithFormat:@"img_%d",i];
        imageView.image = [UIImage imageNamed:name];
        
        [self.scrollView addSubview:imageView];
    }
    
    //2.设置contentsize
    self.scrollView.contentSize = CGSizeMake(5 * scrollViewW, scrollViewH);
    
    //3.设置滚动条为不可见
    self.scrollView.showsVerticalScrollIndicator = NO;
    self.scrollView.showsHorizontalScrollIndicator = NO;
    
    //4.开启分页功能
    self.scrollView.pagingEnabled = YES;
    
    //5.设置总页数
    self.pageControl.numberOfPages = count;
    
    //6.单页时隐藏pageContrl
    self.pageControl.hidesForSinglePage = YES;
    
    //7.开启定时器
    [self startTimer];
    
}

- (void)nextPage{
    //1.计算下一页的页码
    NSInteger page = self.pageControl.currentPage + 1;
    //2.假如超过最后一页
    if (page == 5){
        page = 0;
    }
    //3.滚动到下一页
    [self.scrollView setContentOffset:CGPointMake(page * self.scrollView.frame.size.width, 0) animated:YES];
}

#pragma mark - UIScrollViewDelegate

- (void) scrollViewDidScroll:(UIScrollView *)scrollView
{
    //1.计算页码
    int page = (int)(scrollView.contentOffset.x / scrollView.frame.size.width + 0.5);
    //2.设置页码
    self.pageControl.currentPage = page;
    
}

#pragma mark - 定时器相关代码
-(void)startTimer
{
    //返回一个自动执行的定时器对象
    self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextPage) userInfo:@"123" repeats:YES];
    
    //NSDefaultRunLoopMode(默认):同一时间只能执行一个任务
    //NSRunLoopCommonModes(公用):可以分配一定的时间执行其他任务
    //作用:修改timer在runLoop中的模式为NSRunLoopCommonModes
    //目的:不管主线程在做什么操作,都会分配一定的时间处理定时器
    [[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
}

- (void)stopTimer
{
    [self.timer invalidate];
}

//用户即将开始拖拽scrollView时,停止定时器
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    [self stopTimer];
}

//用户停止拖拽scrollView时,开始定时器
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    [self startTimer];
}
@end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值