Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 55 additions & 4 deletions ZYBannerView/ZYBannerView.m
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,57 @@

#import "ZYBannerView.h"
#import "ZYBannerCell.h"
#import <UIKit/UIKit.h>

#define iOS10 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0)

@interface ZYWeakTimerTarget : NSObject

@property (nonatomic,weak) id target;
@property (nonatomic,assign) SEL selector;

+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval target:(id)target selector:(nonnull SEL)sel;
@end

@implementation ZYWeakTimerTarget
- (instancetype)initWithTarget:(id)target selector:(SEL)sel {
self = [super init];
if (self) {
self.target = target;
self.selector = sel;
}
return self;
}

- (void)timerDidFire:(NSTimer *)timer {
if(self.target)
{
[self.target performSelector:self.selector withObject:timer];
}
else
{
[timer invalidate];
}
}

+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval target:(id)target selector:(SEL)sel {
NSTimer * timer;

if (iOS10) {
__weak id weakTarget = target;
timer = [NSTimer scheduledTimerWithTimeInterval:interval repeats:YES block:^(NSTimer* t) {
id _Nullable strongTarget = weakTarget;
[strongTarget performSelector:sel];
}];
}else {
ZYWeakTimerTarget * weakTarget = [[self alloc]initWithTarget:target selector:sel];
timer = [NSTimer scheduledTimerWithTimeInterval:interval target:weakTarget selector:@selector(timerDidFire:) userInfo:nil repeats:YES];
}

return timer;
}

@end

// 总共的item数
#define ZY_TOTAL_ITEMS (self.itemCount * 10000)
Expand All @@ -23,7 +74,7 @@ @interface ZYBannerView () <UICollectionViewDataSource, UICollectionViewDelegate
@property (nonatomic, strong, readwrite) UIPageControl *pageControl;

@property (nonatomic, assign) NSInteger itemCount;
@property (nonatomic, strong) NSTimer *timer;
@property (nonatomic, weak) NSTimer *timer;

@end

Expand Down Expand Up @@ -129,7 +180,6 @@ - (void)reloadData
- (void)stopTimer
{
[self.timer invalidate];
self.timer = nil;
}

- (void)startTimer
Expand All @@ -138,8 +188,9 @@ - (void)startTimer

[self stopTimer];

self.timer = [NSTimer scheduledTimerWithTimeInterval:self.scrollInterval target:self selector:@selector(autoScrollToNextItem) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
NSTimer * timer = [ZYWeakTimerTarget scheduledTimerWithTimeInterval:self.scrollInterval target:self selector:@selector(autoScrollToNextItem)];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
self.timer = timer;
}

// 定时器方法
Expand Down