Page Control не изменяется при прокрутке прокрутки - PullRequest
1 голос
/ 21 ноября 2011

Я пытаюсь добавить элемент управления страницы в свое представление прокрутки и следовал многочисленным веб-учебникам, большинство из которых использует тот же код, что и этот учебник. Однако, как только я помещаю код в свой проект даже когда я вносил изменения в код, чтобы попытаться заставить его работать, он просто не работает. Мне удалось заставить код работать, когда нажат элемент управления страницей, однако он просто не будет работать для прокрутки страницы. Моя проблема похожа на это , хотя ответы не помогут. Вот мой код:

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 ]

3 голосов
/ 21 ноября 2011

Я заметил, что ваш MainViewController не объявляет себя реализующим UIScrollViewDelegate, поэтому я также предполагаю, что вы забыли установить его в качестве делегата для представления прокрутки в IB (иначе он не скомпилируется).

Поскольку делегат не определен, представление прокрутки не будет вызывать вашу функцию scrollViewDidScroll.

Tim

1 голос
/ 21 ноября 2011

Попробуйте это

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
  {

  }

Этот код работает нормально.Попробуйте это

...