我在scrollView中使用页面控件有一个imageView现在我想在同一个imageView中显示不同的图像。页面控制滚动视图自动滚动。它显示第一个图像但不显示其他图像。我使用的代码如下:
// -----------------------------------------------------------------------------
// loadScrollViewWithPage
- (void)loadScrollViewWithPage:(int)page
{
if ( page < 0 ) return;
if ( page >= kNumberOfPages ) return;
}
// -----------------------------------------------------------------------------
// scrollViewDidScroll
- (void)scrollViewDidScroll:(UIScrollView *)sender
{
if ( pageControlUsed )
{
// do nothing - the scroll was initiated from the page control, not the user dragging
return;
}
// Switch the indicator when more than 50% of the previous/next page is visible
CGFloat pageWidth = mScrollView.frame.size.width;
int page = floor((mScrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
mPageControl.currentPage = page;
// load the visible page and the page on either side of it (to avoid flashes when the user starts scrolling)
[self loadScrollViewWithPage:page - 1];
[self loadScrollViewWithPage:page];
[self loadScrollViewWithPage:page + 1];
}
// -----------------------------------------------------------------------------
// scrollViewWillBeginDragging
// At the begin of scroll dragging, reset the boolean used when scrolls originate from the UIPageControl
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
pageControlUsed = NO;
[mTimer invalidate];
}
// ----------------------------------------------------------------
// scrollViewDidEndDecelerating
// At the end of scroll animation, reset the boolean used when scrolls originate from the UIPageControl
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
pageControlUsed = NO;
}
- (id)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil
tag:(NSInteger)inTag
noOfPoses:(NSInteger)inNoOfPoses
imageName:(NSArray *)inImageNameArr
{
self = [super initWithNibName:@"TIphonePosesDetailView" bundle:nibBundleOrNil];
if (self)
{
mTag = inTag;// tag of the image taken from previous controller
mNoOfPoses = inNoOfPoses;
kNumberOfPages = mNoOfPoses;
if ( inImageNameArr != nil )
{
mImgNameArr = [inImageNameArr retain];// contains images
}
NSLog(@"Image Array%@",mImgNameArr);
}
return self;
}
// -----------------------------------------------------------------------------
// viewDidLoad
- (void)viewDidLoad
{
[super viewDidLoad];
mScrollView.delegate = self;
mScrollView.showsHorizontalScrollIndicator = FALSE;
[mScrollView setContentSize:CGSizeMake(1000, 464)];
[mScrollView setFrame:CGRectMake(45, 69, 240, 226)];
// Setting frame
mStartPoint = CGPointMake(0, 0);
[mPrevImgView setImage:[self getImageFromName:[mImgNameArr objectAtIndex:mTag]]];
[mPrevImgView setFrame:CGRectMake(mStartPoint.x, mStartPoint.y, 240, 226)];
// a page is the width of the scroll view
mScrollView.pagingEnabled = YES;
mScrollView.contentSize = CGSizeMake(mScrollView.frame.size.width * kNumberOfPages, mScrollView.frame.size.height);
mScrollView.showsHorizontalScrollIndicator = NO;
mScrollView.showsVerticalScrollIndicator = NO;
mScrollView.scrollsToTop = NO;
mPageControl.numberOfPages = kNumberOfPages;
mPageControl.currentPage = 0;
// pages are created on demand
// load the visible page
// load the page on either side to avoid flashes when the user starts scrolling
[self loadScrollViewWithPage:0];
[self loadScrollViewWithPage:1];
mTimer = [[NSTimer alloc] initWithFireDate:[NSDate dateWithTimeIntervalSinceNow:2] interval:2.0 target:self selector:@selector(scrollAutomatically:) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:mTimer forMode:NSDefaultRunLoopMode];
}
// -----------------------------------------------------------------------------
// scrollAutomatically
- (void)scrollAutomatically:(id)sender
{
if ( mCurrentPage < [mPageControl numberOfPages] )
{
mCurrentPage ++;
mTag ++;
[mPrevImgView setImage:[self getImageFromName:[mImgNameArr objectAtIndex:mTag]]];
mStartPoint.x += 250 + mPrevImgView.frame.size.width;
}
else
{
mCurrentPage = 0;
}
[self loadScrollViewWithPage:mCurrentPage - 1];
[self loadScrollViewWithPage:mCurrentPage];
[self loadScrollViewWithPage:mCurrentPage + 1];
// update the scroll view to the appropriate page
CGRect frame = mScrollView.frame;
frame.origin.x = frame.size.width * mCurrentPage;
frame.origin.y = 0;
[mScrollView scrollRectToVisible:frame animated:YES];
}
答案 0 :(得分:1)
当您调用此方法时,通过动态修复其坐标来加载所有图像。您可以使用缓存加载图像,这将节省加载时间和可用here
- (void)loadScrollViewWithPage:(int)page
{
if ( page < 0 ) return;
if ( page >= kNumberOfPages ) return;
}
但在加载视图时仅显示第一页
之后,ScrollView委托方法将用于移动页面控件....
但请停止调用这些
[self loadScrollViewWithPage:page - 1];
[self loadScrollViewWithPage:page];
[self loadScrollViewWithPage:page + 1];
它将重复创建图像
答案 1 :(得分:0)
此链接可能对您有所帮助。
而不是这个函数调用它:
+(UIImage *)pageControlColorWithIndex:(NSUInteger)索引
{ }
使用此方法
+(UIImage *)pageControlImageWithIndex:(NSUInteger)索引
{
if(__pageControlColorList == nil)
{
__pageControlColorList = [[NSArray alloc] initWithObjects:[UIImage&gt; imageNamed:@“1.png”],[UIImage imageNamed:@“2.png”],[UIImage imageNamed:@“3.png”], [UIImage imageNamed:@“4.png”],[UIImage imageNamed:@“5.png”],[UIImage&gt; imageNamed:@“6.png”],[UIImage imageNamed:@“7.png”],零];
}return [_ pageControlColorList objectAtIndex:index%[ _pageControlColorList count]]; }
在MyViewController类中添加UIScrollView对象。在ViewDidLoad中调用此
mImage.image = [MyViewController pageControlImageWithIndex:pageNumber];