ifish/Ifish/JHRefresh/UIScrollView+JHRefresh.m

96 lines
2.8 KiB
Objective-C
Executable File

//
// UIScrollView+JHRefresh.m
// JHRefresh
//
// Created by Jiahai on 14-9-15.
// Copyright (c) 2014年 Jiahai. All rights reserved.
//
#import "UIScrollView+JHRefresh.h"
#import "JHRefreshHeaderView.h"
#import "JHRefreshFooterView.h"
#import "AnimationView/JHRefreshCommonAniView.h"
#import "AnimationView/JHRefreshAmazingAniView.h"
#import "objc/runtime.h"
@interface UIScrollView()
@property (nonatomic, weak) JHRefreshHeaderView *header;
@property (nonatomic, weak) JHRefreshFooterView *footer;
@end
@implementation UIScrollView (JHRefresh)
#pragma mark - 关联属性
static char JHRefreshHeaderViewKey;
static char JHRefreshFooterViewKey;
- (void)setHeader:(JHRefreshHeaderView *)header {
[self willChangeValueForKey:@"JHRefreshHeaderViewKey"];
objc_setAssociatedObject(self, &JHRefreshHeaderViewKey,
header,
OBJC_ASSOCIATION_ASSIGN);
[self didChangeValueForKey:@"JHRefreshHeaderViewKey"];
}
- (JHRefreshHeaderView *)header {
return objc_getAssociatedObject(self, &JHRefreshHeaderViewKey);
}
- (void)setFooter:(JHRefreshFooterView *)footer {
[self willChangeValueForKey:@"JHRefreshFooterViewKey"];
objc_setAssociatedObject(self, &JHRefreshFooterViewKey,
footer,
OBJC_ASSOCIATION_ASSIGN);
[self didChangeValueForKey:@"JHRefreshFooterViewKey"];
}
- (JHRefreshFooterView *)footer {
return objc_getAssociatedObject(self, &JHRefreshFooterViewKey);
}
#pragma mark -
- (void)addRefreshHeaderViewWithAniViewClass:(Class)aniViewClass beginRefresh:(void (^)())beginRefresh
{
assert([aniViewClass isSubclassOfClass:[JHRefreshAniBaseView class]]);
if(!self.header)
{
JHRefreshHeaderView *headerView = [JHRefreshHeaderView createView];
headerView.beginRefreshingBlock = beginRefresh;
[self addSubview:headerView];
self.header = headerView;
headerView.aniView = [[aniViewClass alloc] init];
}
}
- (void)addRefreshFooterViewWithAniViewClass:(Class)aniViewClass beginRefresh:(void (^)())beginRefresh
{
assert([aniViewClass isSubclassOfClass:[JHRefreshAniBaseView class]]);
if(!self.footer)
{
JHRefreshFooterView *footerView = [JHRefreshFooterView createView];
footerView.beginRefreshingBlock = beginRefresh;
[self addSubview:footerView];
self.footer = footerView;
footerView.aniView = [[aniViewClass alloc] init];
}
}
- (void)headerStartRefresh
{
self.header.state = JHRefreshStatePulling;
self.contentOffset = CGPointMake(self.contentOffset.x, -JHRefreshViewHeight);
}
- (void)headerEndRefreshingWithResult:(JHRefreshResult)result
{
[self.header endRefreshingWithResult:result];
}
- (void)footerEndRefreshing
{
[self.footer endRefreshingWithResult:JHRefreshResultNone];
}
@end