滚动视图滚动时页面控制不会更改

时间:2011-11-21 09:59:00

标签: ios xcode uiscrollview uipagecontrol

我正在尝试将页面控件添加到我的滚动视图中,并且已经遵循了大量的Web教程,大多数使用与此tutorial.相同的代码但是,一旦我将代码放入我的项目中,即使使用我对代码进行了更改以尝试使其工作,但事实并非如此。我已经设法使代码在按下页面控件时工作,但是它不适用于页面滚动。我的问题类似于this,但答案没有帮助。这是我的代码:

MainViewController.h

@interface MainViewController : UIViewController
{
UIScrollView *svCollegeMain;
UIScrollView *svCollegePage;
UIPageControl *pcCollege;
UIView *viewP1;
}

@property (nonatomic, retain) IBOutlet UIScrollView* svCollegeMain;
@property (nonatomic, retain) IBOutlet UIScrollView* svCollegePage;
@property (nonatomic, retain) IBOutlet UIPageControl * pcCollege;
- (IBAction)changePage;

@end

和MainViewController.m

@implementation MainViewController

@synthesize svCollegeMain, svCollegePage, pcCollege;

- (void)viewDidLoad 
{
[super viewDidLoad];
self.svCollegeMain.contentSize = CGSizeMake(960, 332);
self.svCollegePage.contentSize = CGSizeMake(320, 500);
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Custom initialization
}
return self;
}

- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];

// Release any cached data, images, etc that aren't in use.
}

- (void)scrollViewDidScroll:(UIScrollView *)sender
{
CGFloat pageWidth = 320;
int page = floor((svCollegeMain.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
pcCollege.currentPage = page;
}

- (IBAction)changePage 
{
CGRect frame;
frame.origin.x = self.svCollegeMain.frame.size.width * self.pcCollege.currentPage;
frame.origin.y = 0;
frame.size = self.svCollegeMain.frame.size;
[self.svCollegeMain scrollRectToVisible:frame animated:YES];
}

#pragma mark - View lifecycle

- (void)viewDidUnload
{
[super viewDidUnload];
self.svCollegeMain = nil;
self.svCollegePage = nil;
self.pcCollege = nil;
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end

只是因为这有任何区别,我的视图是用视图设置的,然后是主视图中的主滚动视图和页面控件,主滚动视图中的另一个视图和滚动视图(彼此相邻),最后在第二个滚动视图中的最终视图(全部在IB中,不需要太多代码),并且所有内容都在IB中链接。

2 个答案:

答案 0 :(得分:3)

我注意到你的MainViewController并没有将自己声明为实现UIScrollViewDelegate,所以我也假设你忘了把它设置为IB中滚动视图的委托(否则它不会编译)。

由于没有定义委托,因此滚动视图不会调用scrollViewDidScroll函数。

答案 1 :(得分:1)

试试这个

HeaderFile:

@interface DemoPageControlViewController : UIViewController <UIScrollViewDelegate>
{
IBOutlet UIScrollView *scrollView;
IBOutlet UIPageControl *pageControl;
BOOL pageControlUsed;
NSMutableArray *imageArray;
int  pageNumber;


}


@property (nonatomic, retain) UIScrollView *scrollView;
@property (nonatomic, retain) UIPageControl *pageControl;
@property (nonatomic, retain) NSMutableArray *imageArray;


- (IBAction) changePage:(id)sender;

实施档案:

#import "DemoPageControlViewController.h"

@implementation DemoPageControlViewController
@synthesize pageControl, scrollView, imageArray;
- (void)viewDidLoad 
{
[super viewDidLoad];

CGRect frame;
frame.origin.x = 0;
frame.origin.y = 0;
frame.size = self.scrollView.frame.size;
scrollView.showsVerticalScrollIndicator = NO;
scrollView.showsHorizontalScrollIndicator = NO;

imageArray = [[NSMutableArray alloc]init];
[imageArray addObject:@"small_one.png"];
[imageArray addObject:@"small_two.png"];
[imageArray addObject:@"small_three.png"];
[imageArray addObject:@"small_four.png"];


// add the last image to first
UIImageView *imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:       [imageArray objectAtIndex:([imageArray count] -1)]]];
imageView.frame = CGRectMake(0, 0, scrollView.frame.size.width, scrollView.frame.size.height);
[self.scrollView addSubview:imageView];
[imageView release]; 

for(int i = 0; i < imageArray.count; i++)
{
    UIImageView *imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:[imageArray objectAtIndex:i]]];
    imageView.frame = CGRectMake((scrollView.frame.size.width * i ) + 320   , 0, scrollView.frame.size.width, scrollView.frame.size.height);
    [self.scrollView addSubview:imageView];
    [imageView release];
}
// add the first image to last
imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:[imageArray objectAtIndex:0]]];
imageView.frame = CGRectMake(scrollView.frame.size.width * ([imageArray count]+1), 0, scrollView.frame.size.width, scrollView.frame.size.height);
[self.scrollView addSubview:imageView];
[imageView release]; 

self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * ([imageArray count]+ 2), self.scrollView.frame.size.height);
[scrollView setContentOffset:CGPointMake(0, 0)];
[self.view addSubview:scrollView];
[self.scrollView scrollRectToVisible:CGRectMake(scrollView.frame.size.width,0,scrollView.frame.size.width,scrollView.frame.size.height) animated:NO]; 
}

- (IBAction)changePage :(id)sender
{
CGRect frame;
frame.origin.x = self.scrollView.frame.size.width * self.pageControl.currentPage ;
frame.origin.y = 0;
frame.size = self.scrollView.frame.size;
[self.scrollView scrollRectToVisible:frame animated:YES];
}


- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
pageControlUsed = NO;             
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
//pageControlUsed = NO;

NSLog(@"%f", self.scrollView.contentOffset.x);

CGFloat pageWidth = self.scrollView.frame.size.width;
//pageNumber = floor((self.scrollView.contentOffset.x - pageWidth / ([imageArray count]+2)) / pageWidth) + 1  ;
pageNumber = self.scrollView.contentOffset.x / pageWidth;

if(pageNumber ==  0)
{
    [self.scrollView scrollRectToVisible:CGRectMake((self.scrollView.frame.size.width * [imageArray count]), 0, self.scrollView.frame.size.width, self.scrollView.frame.size.height) animated:NO];
    pageNumber = [imageArray count];
    //self.pageControl.currentPage = pageNumber;
}
else if(pageNumber == ([imageArray count]+1))
{
    [self.scrollView scrollRectToVisible:CGRectMake(self.scrollView.frame.size.width, 0, self.scrollView.frame.size.width, self.scrollView.frame.size.height) animated:NO];
    pageNumber = 1;
    //self.pageControl.currentPage = pageNumber;
}

self.pageControl.currentPage = pageNumber - 1;

  }

 - (void)scrollViewDidScroll:(UIScrollView *)scrollView
  {

  }

本规范正常。试试这个