|
//
// topicCoverFlowCell.m
// ThePaperHD
//
// Created by scar1900 on 15/2/13.
// Copyright (c) 2015年 scar1900. All rights reserved.
//
#import "topicCoverFlowCell.h"
#import "TPImageBaseView.h"
#import "iCarousel.h"
#import "AsyncImageView.h"
#import "UIImage+ImageEffects.h"
#import "UIImage-Extensions.h"
#import "UIImage+wiRoundedRectImage.h"
#import "StyledPageControl.h"
#define IMAGE_SIZE_HEIGHT 125*(rect_screen.size.width-20)/300
@interface topicCoverFlowCell()<iCarouselDataSource,iCarouselDelegate>
@property(nonatomic, strong)iCarousel *coverFLow;
@property(nonatomic, strong)NSMutableArray *dataList;
@property(nonatomic, strong)StyledPageControl *pageControl; //页码指示器
@property(nonatomic, strong)NSTimer *timer;
@end
@implementation topicCoverFlowCell
@synthesize nodeBO = _nodeBO;
@synthesize dataList = _dataList;
@synthesize orientation;
//@synthesize timer;
@synthesize delegate;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
self.backgroundColor = [UIColor colorWithHexString:BackGroundColor];
self.selectionStyle = UITableViewCellSelectionStyleNone;
self.orientation = [[UIApplication sharedApplication] statusBarOrientation];
[self addSubview:self.coverFLow];
[self addSubview:self.pageControl];
[self layoutSubViews];
self.timer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(showNextItem:) userInfo:nil repeats:YES];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(needrefreshNightMode:) name:REFRESHAFTERNIGHTMODE object:nil];
}
return self;
}
- (void)needrefreshNightMode:(id)sender{
self.backgroundColor = [UIColor colorWithHexString:BackGroundColor];
_pageControl.coreSelectedColor = [UIColor colorWithHexString:BLUECOLOR];
_pageControl.coreNormalColor = [UIColor colorWithHexString:@"0xc5c5c5"];
}
- (void)showNextItem:(NSTimer*)timer {
[self.coverFLow scrollToItemAtIndex:self.coverFLow.currentItemIndex+1 animated:YES];
}
- (void)setNodeBO:(nodeObjectBO *)nodeBO {
if (_nodeBO) {
return;
}
_nodeBO = nodeBO;
NSArray *dicList = nodeBO.contList;
if (dicList.count > 0) {
NSMutableArray *tempList = [NSMutableArray array];
[dicList enumerateObjectsUsingBlock:^(NSDictionary *dic, NSUInteger idx, BOOL *stop) {
listContObjectVO *listBO = setJsonDicToDataModel(dic, [listContObjectVO class]);
[tempList addObject:listBO];
}];
self.dataList = tempList;
}
}
- (void)setDataList:(NSMutableArray *)dataList {
_dataList = dataList;
if (dataList.count == 1) {
self.coverFLow.autoscroll = 0;
self.coverFLow.scrollEnabled = NO;
}
self.pageControl.numberOfPages = dataList.count;
[self.coverFLow reloadData];
self.coverFLow.currentItemIndex = 0;
self.pageControl.currentPage = 0;
[self layoutSubViews];
}
- (iCarousel*)coverFLow {
if (!_coverFLow) {
_coverFLow = [[iCarousel alloc]initWithFrame:CGRectZero];
_coverFLow.type = iCarouselTypeLinear;
_coverFLow.delegate = self;
_coverFLow.dataSource = self;
_coverFLow.clipsToBounds = YES;
_coverFLow.backgroundColor = [UIColor clearColor];
_coverFLow.pagingEnabled = YES;
}
return _coverFLow;
}
- (StyledPageControl *)pageControl {
if (!_pageControl) {
_pageControl = [[StyledPageControl alloc] initWithFrame:CGRectZero];
// _pageControl.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin;
_pageControl.pageControlStyle = PageControlStyleDefault;
_pageControl.userInteractionEnabled = NO;
_pageControl.hidesForSinglePage = YES;
_pageControl.currentPage = self.coverFLow.currentItemIndex;
_pageControl.coreSelectedColor = [UIColor colorWithHexString:BLUECOLOR];
_pageControl.coreNormalColor = [UIColor colorWithHexString:@"0xc5c5c5"];
_pageControl.strokeWidth = 5;
_pageControl.gapWidth = 10;
_pageControl.diameter = 13;
_pageControl.backgroundColor = [UIColor clearColor];
}
return _pageControl;
}
- (void)layoutSubViews {
[self.coverFLow remakeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.left);
make.top.equalTo(self.top);
make.width.equalTo(self.width);
make.height.mas_equalTo(IMAGE_SIZE_HEIGHT+40);
}];
[self.pageControl remakeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self.centerX);
make.top.equalTo(self.bottom).offset(-45);
make.width.mas_equalTo(100);
make.height.mas_equalTo(10);
}];
}
- (void)selfDealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
self.coverFLow.delegate = nil;
self.coverFLow.dataSource = nil;
[self.timer invalidate];
self.timer = nil;
self.coverFLow = nil;
}
#pragma mark - iCarousel dataSource and delegate
- (NSInteger)numberOfItemsInCarousel:(iCarousel *)carousel {
return self.dataList.count;
}
- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view {
if (view == nil) {
view = [[TPImageBaseView alloc] initWithFrame:CGRectMake(0, 0, rect_screen.size.width, IMAGE_SIZE_HEIGHT+40)];
}
TPImageBaseView *item = (TPImageBaseView *)view;
listContObjectVO *contentBO = self.dataList[index];
[item setType:BASEIMAGETYPEFLOW];
item.listContent = contentBO;
return view;
}
- (void)carousel:(iCarousel *)carousel didSelectItemAtIndex:(NSInteger)index {
if (index != carousel.currentItemIndex) {
return;
}
// if ([self.delegate respondsToSelector:@selector(didSelectOneFlow:)]) {
// listContObjectVO *contentBO = self.dataList[index];
// [self.delegate didSelectOneFlow:contentBO];
// }
listContObjectVO *contentBO = self.dataList[index];
if ([self.delegate respondsToSelector:@selector(pushToCoverFlowDetail:)]) {
[self.delegate pushToCoverFlowDetail:contentBO];
}
}
- (void)carouselCurrentItemIndexDidChange:(iCarousel *)carousel {
self.pageControl.currentPage = carousel.currentItemIndex;
}
- (void)carouselDidEndDragging:(iCarousel *)carousel willDecelerate:(BOOL)decelerate {
[self.timer invalidate];
self.timer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(showNextItem:) userInfo:nil repeats:YES];
}
- (CGFloat)carousel:(__unused iCarousel *)carousel valueForOption:(iCarouselOption)option withDefault:(CGFloat)value
{
//customize carousel display
switch (option)
{
case iCarouselOptionWrap:
{
//normally you would hard-code this to YES or NO
return YES;
}
case iCarouselOptionSpacing:
{
//add a bit of spacing between the item views
if (self.orientation == UIInterfaceOrientationPortrait
|| self.orientation == UIInterfaceOrientationPortraitUpsideDown) {
return value*1.1f;
}else {
return value*1.1f;
}
}
case iCarouselOptionFadeMax:
{
return value;
}
// case iCarouselOptionShowBackfaces:
case iCarouselOptionRadius:
{
return value;
}
// case iCarouselOptionAngle:
// case iCarouselOptionArc:
// case iCarouselOptionTilt:
// case iCarouselOptionCount:
// case iCarouselOptionFadeMin:
// case iCarouselOptionFadeMinAlpha:
// case iCarouselOptionFadeRange:
// case iCarouselOptionOffsetMultiplier:
// case iCarouselOptionVisibleItems:
default:
{
return value;
}
}
}
- (CGFloat)carouselItemWidth:(iCarousel *)carousel {
return rect_screen.size.width-20;
}
- (void)awakeFromNib {
// Initialization code
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
@end
|