#pragma
amrk - 初始化
-
(
void
)initScrollViewAndPageWithImgArray:(
NSArray
*)imgArray
andSRect
:(CGRect)scrollViewRect
andPRect
:(CGRect)pageRect
{
sourceImgArray
= [imgArray
mutableCopy
];
self
.frame
= CGRectMake(
0
,
0
,
[
UIScreen
mainScreen
]
.bounds
.size
.width
,
1
2
0
);
self
.scrollView
= [[
UIScrollView
alloc
]
initWithFrame
:
self
.frame
];
self
.scrollView
.contentSize
= CGSizeMake(
self
.scrollView
.frame
.size
.width
*
3
,
self
.scrollView
.frame
.size
.height
);
[
self
.scrollView
setContentOffset
:CGPointMake(
self
.scrollView
.frame
.size
.width
,
0
)];
self
.scrollView
.pagingEnabled
=
YES
;
self
.scrollView
.delegate
=
self
;
[
self
addSubview
:
self
.scrollView
];
UITapGestureRecognizer
*tapges = [[
UITapGestureRecognizer
alloc
]
initWithTarget
:
self
action
:
@selector
(clickAction:)];
[
self
.scrollView
addGestureRecognizer
:tapges];
headImgArrayCount
= sourceImgArray
.count
;
[
self
addImgViewForScrollView
];
self
.page
= [[
UIPageControl
alloc
]
initWithFrame
:pageRect];
self
.page
.currentPage
=
0
;
self
.page
.numberOfPages
= sourceImgArray
.count
;
self
.page
.pageIndicatorTintColor
= [
UIColor
whiteColor
];
self
.page
.currentPageIndicatorTintColor
= [
UIColor
orangeColor
];
[
self
addSubview
:
self
.page
];
time
= [
NSTimer
scheduledTimerWithTimeInterval
:
2
target
:
self
selector
:
@selector
(timeAction:)
userInfo
:nil
repeats
:
YES
];
}
#pragma
mark - 加載imageview的image
-
(
void
)addImgViewForScrollView
{
static
dispatch_once_t predicate;
dispatch_once(&predicate;,
^{
self
.leftImageView
= [[
UIImageView
alloc
]
initWithFrame
:CGRectMake(
0
,
0
,
self
.scrollView
.frame
.size
.width
,
self
.scrollView
.frame
.size
.height
)];
self
.centerImageView
= [[
UIImageView
alloc
]
initWithFrame
:CGRectMake(
self
.scrollView
.frame
.size
.width
,
0
,
self
.scrollView
.frame
.size
.width
,
self
.scrollView
.frame
.size
.height
)];
self
.rightImageView
= [[
UIImageView
alloc
]
initWithFrame
:CGRectMake(
2
*
self
.scrollView
.frame
.size
.width
,
0
,
self
.scrollView
.frame
.size
.width
,
self
.scrollView
.frame
.size
.height
)];
leftImageIndex
= headImgArrayCount-
1
;
centerImageIndex
=
0
;
rightImageIndex
=
1
;
[
self
.scrollView
addSubview
:_leftImageView];
[
self
.scrollView
addSubview
:_centerImageView];
[
self
.scrollView
addSubview
:_rightImageView];
});
self
.leftImageView
.image
= [
UIImage
imageNamed
:sourceImgArray[leftImageIndex]];
self
.rightImageView
.image
= [
UIImage
imageNamed
:sourceImgArray[rightImageIndex]];
self
.centerImageView
.image
= [
UIImage
imageNamed
:sourceImgArray[centerImageIndex]];
[
self
.scrollView
setContentOffset
:CGPointMake(
self
.scrollView
.frame
.size
.width
,
0
)];
self
.scrollView
.userInteractionEnabled
=
YES
;
}
#pragma
mark - NSTimer計時器觸發事件
-
(
void
)timeAction:(
NSTimer
*)sender
{
if
(
self
.page
.currentPage
== headImgArrayCount -
2
){
self
.page
.currentPage
= headImgArrayCount-
1
;
centerImageIndex
= headImgArrayCount -
1
;
rightImageIndex
=
0
;
leftImageIndex
= centerImageIndex -
1
;
}
else
if
(
self
.page
.currentPage
== headImgArrayCount -
1
){
self
.page
.currentPage
=
0
;
centerImageIndex
=
0
;
leftImageIndex
= headImgArrayCount -
1
;
rightImageIndex
= centerImageIndex +
1
;
}
else
{
self
.page
.currentPage
+=
1
;
centerImageIndex
=
self
.page
.currentPage
;
leftImageIndex
= centerImageIndex -
1
;
rightImageIndex
= centerImageIndex +
1
;
}
[
self
.scrollView
setContentOffset
:CGPointMake(
self
.scrollView
.frame
.size
.width
*
2
,
0
)
animated
:
YES
];
self
.scrollView
.userInteractionEnabled
=
NO
;
}
#pragma
mark - scrollview輪播代理
-
(
void
)scrollViewWillBeginDragging:(
UIScrollView
*)scrollView;
{
[time
setFireDate
:[
NSDate
distantFuture
]];
}
-
(
void
)scrollViewDidEndDragging:(
UIScrollView
*)scrollView
willDecelerate
:(
BOOL
)decelerate
{
if
(decelerate){
self
.scrollView
.userInteractionEnabled
=
NO
;
}
}
#pragma
mark - 當手動滑動,scrollview停止滾動時
-
(
void
)scrollViewDidEndDecelerating:(
UIScrollView
*)scrollView
{
CGFloat
contentOffset = scrollView
.contentOffset
.x
-scrollView
.frame
.size
.width
;
int
offsetPage = contentOffset/scrollView
.frame
.size
.width
;
pageNum
=
self
.page
.currentPage
;
if
(pageNum
==
0
&& offsetPage == -
1
){
pageNum
= -
1
;
}
if
(pageNum == headImgArrayCount-
1
&& offsetPage ==
1
){
pageNum
= headImgArrayCount;
}
self
.page
.currentPage
+= offsetPage;
if
(pageNum == -
1
)
{
self
.page
.currentPage
= headImgArrayCount-
1
;
centerImageIndex
= headImgArrayCount-
1
;
leftImageIndex
= centerImageIndex-
1
;
rightImageIndex
=
0
;
pageNum
= headImgArrayCount;
}
else
if
(pageNum == headImgArrayCount) {
self
.page
.currentPage
=
0
;
centerImageIndex
=
0
;
leftImageIndex
= headImgArrayCount-
1
;
rightImageIndex
= centerImageIndex+
1
;
pageNum
=
0
;
}
else
{
centerImageIndex
=
self
.page
.currentPage
;
leftImageIndex
= centerImageIndex-
1
;
rightImageIndex
= centerImageIndex+
1
;
if
(
self
.page
.currentPage
==
0
)
{
leftImageIndex
= headImgArrayCount-
1
;
}
if
(
self
.page
.currentPage
== headImgArrayCount-
1
)
{
rightImageIndex
=
0
;
}
}
[
self
addImgViewForScrollView
];
self
.scrollView
.userInteractionEnabled
=
YES
;
time
= [
NSTimer
scheduledTimerWithTimeInterval
:
2
target
:
self
selector
:
@selector
(timeAction:)
userInfo
:nil
repeats
:
YES
];
}
#pragma
mark - 當計時器啓動,scrollview滾動結束時
-
(
void
)scrollViewDidEndScrollingAnimation:(
UIScrollView
*)scrollView;
{
[
self
addImgViewForScrollView
];
}
#pragma
mark - 點擊scrollView手勢動作
-
(
void
)clickAction:(
UITapGestureRecognizer
*)sender
{
[[
NSNotificationCenter
defaultCenter
]
postNotificationName
:
@"MMMHeadScrollView"
object
:nil
userInfo
:@{
@"MMMHeadScrollView"
:@(
self
.page
.currentPage
)}];
}
下面是點擊事件,可以上下滑動查看
#pragma
mark - 點擊scrollView手勢動作
-
( void )clickAction:( UITapGestureRecognizer
*)sender
{
[[ NSNotificationCenter
defaultCenter ]
postNotificationName : @"MMMHeadScrollView"
object :nil
userInfo :@{ @"MMMHeadScrollView" :@( self .page .currentPage )}];
}
|