This article examples of iOS unlimited scrolling effect, share for everyone to refer to, the specific contents are as follows
Slide to the current position to request, local content is directly displayed (since Sdwebimage,uiview+ext)
HZScrollView.h
#import <UIKit/UIKit.h> typedef void (^hzreturnblock) (Nsinteger index,cgfloat offset);
typedef ns_enum (Nsuinteger, hzscrollviewpagecontrollposition) {hzscrollviewpagecontrollpositionnone,
Hzscrollviewpagecontrollpositionleft, Hzscrollviewpagecontrollpositioncenter,
Hzscrollviewpagecontrollpositionright,};
@class Hzscrollview; @protocol hzscrollviewdelegate <NSObject> @optional-(void) Resetposition: (Hzscrollview *) ScrollView Andindex: (
Nsinteger) index; @end @interface Hzscrollview:uiview/** * Back to current position */@property (nonatomic, weak) ID
hzscrollview.m
#import "Uiimageview+webcache.h" #import "HZScrollView.h" #import "uiview+dylanframtool.h" #define Hz_formatimage (Val
_imageview) \-(Uiimageview *) val_imageview\ {\ if (!_# #val_imageView) {\ _# #val_imageView = [[Uiimageview alloc] Init];\ }\ return _# #val_imageView; \} \//Width #define HZ_SWIDTH self.bounds.size.width//height #define Hz_sheight self.bounds.size.height #define Hz_pheight
@interface Hzscrollview () <UIScrollViewDelegate> @property (nonatomic, copy) Hzreturnblock Hz_block;
/** * Total number * * * @property (nonatomic,assign) Nsinteger Hz_maxcount;
/** * Current Position * * * @property (nonatomic,assign) Nsinteger Hz_currentindex;
/** * Container * * * @property (nonatomic, strong) Uiscrollview *scrollview;
/** * You know the drop * * * * @property (nonatomic, strong) Uipagecontrol *pagecontroll;
/** View **/@property (nonatomic, strong) Uiimageview *leftimageview;
@property (nonatomic, strong) Uiimageview *centerimageview;
@property (nonatomic, strong) Uiimageview *rightimageview; @end @implEmentation Hzscrollview {cgrect _hz_frame;}
#pragma mark-#pragma mark-init-(instancetype) initWithFrame: (CGRect) frame {self = [super Initwithframe:frame];
if (self) {_hz_frame = Frame;
[Self addSubview:self.scrollView];
[Self configimageview];
[Self addSubview:self.pageControll];
return self; #pragma mark-#pragma mark-config-(void) Configimageview {self.leftImageView.frame = CGRectMake (0, 0, Hz_swidth,
Hz_sheight);
[Self.scrollview AddSubview:self.leftImageView];
Self.centerImageView.frame = CGRectMake (hz_swidth, 0, Hz_swidth, hz_sheight);
[Self.scrollview AddSubview:self.centerImageView];
Self.rightImageView.frame = CGRectMake (hz_swidth * 2, 0, Hz_swidth, hz_sheight);
[Self.scrollview AddSubview:self.rightImageView]; #pragma mark-#pragma mark-reset-(void) Sethz_placeimage: (UIImage *) hz_placeimage {_hz_placeimage = Hz_placeimage
;
[Self changeimageleft:-1 center:-1 right:-1]; if (self.hz_maxcount) {[Self SetHZ_MaxCount:self.hz_ImageList.count];
}-(void) Sethz_imagelist: (Nsarray *) hz_imagelist {_hz_imagelist = [hz_imagelist copy];
[Self sethz_maxcount:_hz_imagelist.count];
}-(void) Sethz_maxcount: (Nsinteger) hz_maxcount {_hz_maxcount = Hz_maxcount;
Switch (_hz_maxcount) {case 0:self.scrollview.scrollenabled = NO;
[Self changeimageleft:-1 center:-1 right:-1];
Break
Case 1:self.scrollview.scrollenabled = NO;
[Self changeimageleft:0 center:0 right:0];
Break
default:self.scrollView.scrollEnabled = YES;
[Self changeimageleft:_hz_maxcount-1 center:0 right:1];
Break
} self.pageControll.numberOfPages = _hz_maxcount;
[Self sethz_pagecontrollposition:_hz_pagecontrollposition]; }-(void) Sethz_pagecontrollposition: (hzscrollviewpagecontrollposition) hz_pagecontrollposition {_hz_
Pagecontrollposition = hz_pagecontrollposition;
CGFloat width = self.hz_maxcount * hz_pheight; Switch (_hz_pagecontrollposition) {Case HZScrollViewPageControllPositionNone:self.pageControll.hidden = YES;
Break
Case HZScrollViewPageControllPositionLeft:self.pageControll.hidden = NO; Self.pageControll.frame = CGRectMake (Ten, SELF.PAGECONTROLL.FRAME.ORIGIN.Y, width,
Self.pageControll.frame.size.height);
Break
Case HZScrollViewPageControllPositionCenter:self.pageControll.hidden = NO; Self.pageControll.frame = CGRectMake (self.bounds.size.width-width)/2.f, self.pagecontroll.frame.origin.y, Width,
Self.pageControll.frame.size.height);
Break
Case HZScrollViewPageControllPositionRight:self.pageControll.hidden = NO; Self.pageControll.frame = CGRectMake (Self.bounds.size.width-10-width, SELF.PAGECONTROLL.FRAME.ORIGIN.Y, Width,
Self.pageControll.frame.size.height);
Break
Default:break;
} if (width <= hz_pheight) {Self.pageControll.hidden = YES; }} #pragma mark-#pragma mark-lz-(Uiscrollview *) ScrollView {if (!_scrollview) {_scrollview = [[Uiscrollview alloc] initWithFrame:self.bounds];
_scrollview.pagingenabled = YES;
_scrollview.showshorizontalscrollindicator = NO;
_scrollview.delegate = self;
_scrollview.contentsize = Cgsizemake (Hz_swidth * 3,0);
return _scrollview; }-(Uipagecontrol *) Pagecontroll {if (!_pagecontroll) {_pagecontroll = [[Uipagecontrol alloc] Initwithframe:cgrec
Tmake (0,hz_sheight-hz_pheight,hz_pheight, 7)];
_pagecontroll.pageindicatortintcolor = [Uicolor Lightgraycolor];
_pagecontroll.currentpageindicatortintcolor = [Uicolor Whitecolor];
_pagecontroll.numberofpages = Self.hz_maxcount;
_pagecontroll.currentpage = 0;
return _pagecontroll;
} hz_formatimage (Leftimageview);
Hz_formatimage (Centerimageview);
Hz_formatimage (Rightimageview); #pragma mark-#pragma mark-private method-(void) Changeimagewithoffset: (cgfloat) OffsetX {if (OffsetX >= Hz_swidth * 2) {self.hz_currentindex++; if (Self.hz_currentindex = = self.hz_maxcount-1) {[Self changeimageleft:self.hz_currentindex-1 center:s
Elf.hz_currentindex right:0];
}else if (Self.hz_currentindex = = self.hz_maxcount) {self.hz_currentindex = 0;
[Self changeimageleft:self.hz_maxcount-1 center:0 right:1];
}else {[Self changeimageleft:self.hz_currentindex-1 center:self.hz_currentIndex right:self.hz_currentIndex + 1];
} if (Self.hz_block) {self.hz_block (SELF.HZ_CURRENTINDEX,OFFSETX);
} self.pageControll.currentPage = Self.hz_currentindex;
} if (OffsetX <= 0) {self.hz_currentindex--;
if (Self.hz_currentindex = = 0) {[self changeimageleft:self.hz_maxcount-1 center:0 right:1];
}else if (Self.hz_currentindex = = 1) {self.hz_currentindex = self.hz_maxcount-1; [Self changeimageleft:self.hz_currentindex-1 center:self.hZ_currentindex right:0];
}else {[self changeimageleft:self.hz_currentindex-1 center:self.hz_currentIndex right:self.hz_currentindex+1];
} if (Self.hz_block) {self.hz_block (SELF.HZ_CURRENTINDEX,OFFSETX);
} self.pageControll.currentPage = Self.hz_currentindex;
} [self sethz_pagecontrollposition:_hz_pagecontrollposition]; }-(void) Changeimageleft: (nsinteger) Leftindex Center: (nsinteger) Centerindex right: (Nsinteger) Rightindex {if (self.h
Z_currentindex > Self.hz_maxcount) {return; } if (Leftindex = = 1 && centerindex = = 1 && rightindex = = 1) {self.leftImageView.image = Self.hz
_placeimage;
Self.centerImageView.image = Self.hz_placeimage;
Self.rightImageView.image = Self.hz_placeimage; else {[self checkexistimage:self.hz_imagelist[leftindex] ImageView:self.leftImageView currentind
ex:@ (Leftindex)]; [Self Checkexistimage:self.hz_imagelist[centerindex] ImAgeView:self.centerImageView currentindex:@ (Centerindex)]; [Self Checkexistimage:self.hz_imagelist[rightindex] ImageView:self.rightImageView currentindex:@ (righti
Ndex)];
[Self.scrollview setcontentoffset:cgpointmake (hz_swidth, 0)]; }-(void) Checkexistimage: (NSString *) urlstring ImageView: (Uiimageview *) Currentimageview currentindex: (NS Number *) Index {if ([[[[Sdwebimagemanager Sharedmanager] imagecache] imagefromdiskcacheforkey:urlstring]) {Curren
Timageview.image = [[[Sdwebimagemanager Sharedmanager] imagecache] imagefrommemorycacheforkey:urlstring];
Return
else {currentimageview.image = Self.hz_placeimage;
if (self.hz_currentindex!= [index IntegerValue]) {return; [Self performselector: @selector (downloadimage:) Withobject:@[urlstring,currentimageview] afterdelay:0 inModes:@[
Nsdefaultrunloopmode]]; }}-(void) Downloadimage: (Nsarray *) param {nsstring *urlstring = [paramObject];
__weak uiimageview *currentimageview = [param lastobject]; [[Sdwebimagemanager Sharedmanager] Downloadimagewithurl:[nsurl urlwithstring:urlstring] options:0 progress:^ (
Nsinteger receivedsize, Nsinteger expectedsize) {NSLog (@ "received:%@", @ (receivedsize)); } completed:^ (UIImage *image, Nserror *error, Sdimagecachetype CacheType, BOOL finished, Nsurl *imageURL) {CurrentIma
Geview.image = image;
[[[Sdwebimagemanager Sharedmanager] imagecache] storeimage:image forkey:urlstring];
[[[Sdwebimagemanager Sharedmanager] imagecache] storeimage:image forkey:urlstring Todisk:yes];
}]; #pragma mark-#pragma mark-uiscrollviewdelegate-(void) Scrollviewdidscroll: (Uiscrollview *) ScrollView {[Self chan
Geimagewithoffset:scrollview.contentoffset.x]; }-(void) scrollviewdidenddecelerating: (Uiscrollview *) ScrollView {Nsinteger index = Scrollview.contentoffset.x/scro
Llview.width; if ([Self.delegate respondstoselector: @selector (resetposition:andindex:)]) {[Self.delegate resetposition:self AndIndex:self.hz_currentIndex];
} #pragma mark-#pragma mark-public method-(void) Transformview: (cgfloat) offset {if (offset > 0) {return;
} cgfloat currentheight = 210-offset;
Self.height = Currentheight;
CGFloat Currentscale = currentheight/_hz_frame.size.height;
Self.left = _hz_frame.origin.x-(_hz_frame.size.width * Currentscale-_hz_frame.size.width)/2.f;
Self.width = _hz_frame.size.width * Currentscale;
Self.top = offset;
Self.scrollView.size = self.size;
Self.leftImageView.size = self.size;
Self.centerImageView.size = self.size;
Self.rightImageView.size = self.size;
self.centerimageview.x = Self.width;
self.rightimageview.x = Self.width * 2;
Self.scrollView.contentSize = Cgsizemake (self.width *3, self.height);
[Self.scrollview setcontentoffset:cgpointmake (hz_swidth, 0)]; }-(void) Hz_getcontent: (hzreturnblock) block {self.hz_block = block;}-(void) Layoutsubviews {[Super layoutsubviews]; } @end
The above is the entire content of this article, I hope to help you learn.