我编写了一个带有TableView和detailView的iPhone应用程序,其中包含一个包含2页(包含图像)的ScrollView和一个显示2个白点的pageControl。
它似乎完美无缺。视图向左滚动并显示下一页(就像它应该的那样)除了scrollView下的小白点(PageControl点)。 如果我按下小点:页面滚动,第二个点突出显示(完美!)。但如果我将第一页(用我的拇指手工制作)滑到下一页,白点就不会随之改变。 (它应突出显示第二个点)。
希望有人可以帮助我。我已经阅读了10次代码并搜索了我可以找到的示例代码。这是我的代码:
#import <UIKit/UIKit.h>
@interface DetailViewController : UIViewController
<UIScrollViewDelegate>
{
NSString *selectedImage1;
NSString *selectedImage2;
NSNumber *selectedNpages;
IBOutlet UIScrollView* scrollView;
IBOutlet UIPageControl* pageControl;
BOOL pageControlIsChangingPage;
}
@property (nonatomic, retain) NSString *selectedImage1;
@property (nonatomic, retain) NSString *selectedImage2;
@property (nonatomic, retain) NSNumber *selectedNpages;
@property (nonatomic, retain) UIView *scrollView;
@property (nonatomic, retain) UIPageControl* pageControl;
-(IBAction)changePage:(id)sender;
-(void)setupPage;
@end
#import "DetailViewController.h"
@implementation DetailViewController
@synthesize selectedImage1;
@synthesize selectedImage2;
@synthesize selectedNpages;
@synthesize scrollView;
@synthesize pageControl;
#pragma mark -
#pragma mark UIView boilerplate
- (void)viewDidLoad
{
[self setupPage];
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
- (void)viewDidUnload
{
[scrollView release];
[pageControl release];
}
#pragma mark -
#pragma mark The Guts
- (void)setupPage
{
scrollView.scrollsToTop = NO;
scrollView.delegate = self;
scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
scrollView.clipsToBounds = YES;
scrollView.scrollEnabled = YES;
scrollView.pagingEnabled = YES;
scrollView.showsHorizontalScrollIndicator = NO;
scrollView.showsVerticalScrollIndicator = NO;
[scrollView setCanCancelContentTouches:NO];
pageControl.currentPage = 0;
NSString *image1a = selectedImage1;
NSString *image2a = selectedImage2;
CGFloat cx = 0;
//FIRST PAGE
// Image
UIImage *bimage = [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:image1a ofType:@"jpg"]];
UIImageView *bimageView = [[UIImageView alloc] initWithImage:bimage];
CGRect brect = bimageView.frame;
brect.size.height = bimage.size.height;
brect.size.width = bimage.size.width;
brect.origin.x = ((scrollView.frame.size.width - bimage.size.width) / 2) + cx;
brect.origin.y = ((scrollView.frame.size.height - bimage.size.height) / 2);
bimageView.frame = brect;
[scrollView addSubview:bimageView];
[bimageView release];
cx += scrollView.frame.size.width;
//SECOND PAGE
if([selectedNpages intValue] == 2)
{
//Image
UIImage *bimage2 = [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:image2a ofType:@"jpg"]];
UIImageView *bimage2View = [[UIImageView alloc] initWithImage:bimage2];
UIImageView *bimageView2 = [[UIImageView alloc] initWithImage:bimage2];
CGRect brect2 = bimageView2.frame;
brect2.size.height = bimage2.size.height;
brect2.size.width = bimage2.size.width;
brect2.origin.x = ((scrollView.frame.size.width - bimage2.size.width) / 2) + cx;
brect2.origin.y = ((scrollView.frame.size.height - bimage2.size.height) / 2);
bimageView2.frame = brect2;
[scrollView addSubview:bimageView2];
[bimageView2 release];
cx += scrollView.frame.size.width;
}
self.pageControl.numberOfPages = [selectedNpages intValue];
[scrollView setContentSize:CGSizeMake(cx, [scrollView bounds].size.height)];
[image1a release];
[image2a release];
}
#pragma mark -
#pragma mark UIScrollViewDelegate stuff
- (void)ScrollViewDidScroll:(UIScrollView *)_scrollView
{
if (pageControlIsChangingPage) {
return;
}
CGFloat pageWidth = _scrollView.frame.size.width;
int page = floor((_scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
pageControl.currentPage = page;
}
- (void)ScrollViewDidEndDecelerating:(UIScrollView *)_scrollView
{
pageControlIsChangingPage = NO;
}
#pragma mark -
#pragma mark PageControl stuff
- (IBAction)changePage:(id)sender
{
CGRect frame = scrollView.frame;
frame.origin.x = frame.size.width * pageControl.currentPage;
frame.origin.y = 0;
[scrollView scrollRectToVisible:frame animated:YES];
pageControlIsChangingPage = YES;
}
- (void)dealloc {
[DetailViewController release];
[selectedImage1 release];
[selectedImage2 release];
[selectedImage2 release];
[selectedNpages release];
[super dealloc];
}
@end
感谢您花时间阅读本文。
答案 0 :(得分:4)
ScrollViewDidScroll:
应以小写“S”开头,例如scrollViewDidScroll:
。这同样适用于scrollViewDidEndDecelerating:
。
好吧,在Objective-C中,您应该始终使用小写字符启动方法。大写保留用于类名,常量,也可以是全局变量。方法 - 从不!
答案 1 :(得分:1)
如果Michal的答案没有解决,请尝试:
在Interface Builder中将pageControl
IBOutlet连接到您的班级?如果未连接,则pageControl.currentPage = page;
中的- (void)scrollViewDidScroll:(UIScrollView *)_scrollView
不会更改所选的点。