热更新demo

topicCoverFlowCell.m 8.2KB

    // // 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