ScrollView:PageControl点不会随页面改变 [英] ScrollView: PageControl dot doesnt change with the page

查看:52
本文介绍了ScrollView:PageControl点不会随页面改变的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我编写了一个带有TableView和detailView的iPhone App,其中包含一个包含2页的ScrollView(均包含图像)和一个显示2个白点的pageControl.

I've written an iPhone App with a TableView and a detailView which contains a ScrollView with 2 pages (both containing an image) and a pageControl displaying 2 white dots.

似乎一切正常.该视图向左滚动并显示下一页(按应显示的样子),scrollView下的小白点(PageControl点)除外. 如果我按这些小点:滚动页面,第二个点突出显示(完美!).但是,如果我将第一页(用拇指手动)滑到下一页,则白点不会随之改变. (应突出显示第二个点).

It al seems to work perfect. The view scrolls to the left and show the next page (just as it should) Except for the little white dots (PageControl dots) that are under the scrollView. If I press the little dots: the page scrolls and the second dot becomes highlighted (perfect!). But if I slide the first page (manualy with my thumb) to the next page the white dot doesnt change with it. (It should highlight the second dot).

希望有人可以帮助我.我已经阅读了10次代码,并搜索了我可能找到的所有示例代码.

Hope somebody can help me. I've read the code 10 times and searched through al sample code I coould find.

这是我的代码:

#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

感谢您抽出宝贵时间阅读本文章.

Thank you for taking time to read this.

推荐答案

ScrollViewDidScroll:应该以小写的"S"开头,例如scrollViewDidScroll:. scrollViewDidEndDecelerating:也是如此.

ScrollViewDidScroll: should start with lowercase "S", like this scrollViewDidScroll:. The same applies to scrollViewDidEndDecelerating:.

好吧,在Objective-C中,您应该始终以小​​写字符开头的方法.大写字母保留用于类名,常量或全局变量.方法-永远不会!

Well, in Objective-C you should ALWAYS start methods with lowercase character. Uppercase is reserved for class-names, constants, maybe globals. Methods - never!

这篇关于ScrollView:PageControl点不会随页面改变的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆