我正在尝试使用NSTimer创建幻灯片...但以下代码不会定期滚动图像......
- (void)tilePages
{
// Calculate which pages are visible
CGRect visibleBounds = pagingScrollView.bounds;
int firstNeededPageIndex = floorf(CGRectGetMinX(visibleBounds) / CGRectGetWidth(visibleBounds));
int lastNeededPageIndex = floorf((CGRectGetMaxX(visibleBounds)-1) / CGRectGetWidth(visibleBounds));
firstNeededPageIndex = MAX(firstNeededPageIndex, 0);
lastNeededPageIndex = MIN(lastNeededPageIndex, [self imageCount] - 1);
// Recycle no-longer-visible pages
for (ImageScrollView *page in visiblePages) {
if (page.index < firstNeededPageIndex || page.index > lastNeededPageIndex) {
[recycledPages addObject:page];
[page removeFromSuperview];
}
}
[visiblePages minusSet:recycledPages];
// add missing pages
for (int index = firstNeededPageIndex; index <= lastNeededPageIndex; index++) {
if (![self isDisplayingPageForIndex:index]) {
ImageScrollView *page = [self dequeueRecycledPage];
if (page == nil) {
page = [[[ImageScrollView alloc] init] autorelease];
}
[self configurePage:page forIndex:index];
[pagingScrollView addSubview:page];
[visiblePages addObject:page];
}
}
}
在ViewWillAppear方法中,我使用了...
timer = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(timerFired:) userInfo:nil repeats:YES];
和
以我曾经使用过的间隔调用事件...
-(void)timerFired:(NSTimer *)timer
{
[self tilePages];
}
我试过调试。该事件在3秒内被解雇,但是tilePages没有被调用。我使用了相同的scrollViewDidScroll方法,在tilePages中执行得很好......可能是什么问题???请帮忙......
答案 0 :(得分:0)
调用[self tilePages];不会显示新页面。看起来您将基于WWDC 2010示例代码进行分页和缩放图像。因为我熟悉那些代码,所以我可以帮助一些。
您应该创建自己的方法来更改pagingScrollView的框架。然后你应该从timerFired方法调用这个方法。将[self tilePages]替换为[self changePage]并添加以下代码:
-(void)changePage{
CGRect pageFrame = pagingScrollView.frame;
pageFrame.size.width -= (2 * 10);
pageFrame.origin.x = (pagingScrollView.frame.size.width * aVariableHoldingTheCurrentPageNumber)+20;
[pagingScrollView scrollRectToVisible:pageFrame animated:YES];
}
基本上只计算要滚动到的页面框架,然后调用scrollRectToVisible。
我希望这会有所帮助。