UIKit之图片轮播器Demo

需求

实现图片轮播器,搭配页面指示器、可以自动轮播。
注意计时器优先级问题
在这里插入图片描述

分析

  1. 需要UIScrollView组件、指示器UIPageControl。此外自定义类需要实现代理
  2. 自动滚动需要监控当前屏幕的offsetx。
  3. 防止拖拽自动滚动时一下子翻滚太多的BUG:拖拽时,撤销当前timer,放开再创建新的timer。
  4. 注意计时器优先级问题,使用计时器,经常会出现被其它组件抢占线程的情况,所以代码要做出修改,修改消息循环中计时器的优先级。

实现

· 自定义类的创建:

#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN

@interface PicAutoPlayView : UIView<UIScrollViewDelegate>
@property (nonatomic, strong) UIScrollView *scrollView;
@property (nonatomic, strong) UIPageControl *pagecontrol;
// 为图片滚动拖住不放而自动滚动的记时也停止,需要在类中引用计时器:否则有BUG
// 弱引用即可,销毁不跟随此类:在开始拖拽的方法中实现
@property(weak, nonatomic) NSTimer *timer;
@end

NS_ASSUME_NONNULL_END

· 功能实现:

#import "PicAutoPlayView.h"

@implementation PicAutoPlayView

/*
 遇到问题:
    图片不显示:UIScrollView没有初始化
    图片像素太大,截一下
    
    此外,其它可滚动的同优先级组件在响应其它处理时,会影响当前自动滚动组件的计时器,因为主线程跑去执行那个任务了
        消息循环:
    // 获取当前消息循环对象
    NSRunLoop:让timer优先级和当前控件一样,即可。
    
 
 */


/*
 
 没有显示图片:
 输出一下sc坐标和imgview坐标
 */
-(instancetype) initWithFrame:(CGRect)frame{
   
   
    self = [super initWithFrame:frame];
    // 其实scrollview整个就是加进的全部UIImageView
    _scrollView.backgroundColor = [UIColor grayColor];
    // scrollview没有初始化,半天找不到它
    _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值