我有一个UIScrollView显示三个图像,(目前还有两个UIImages和一个UIColor,因为我还没有收到第三个图片)而且我一直在尝试添加一个UIPageControl但是有一些问题。
我需要UIPageControl具有透明背景(在IB中很容易),然后让它位于UIScrollView的顶部并显示用户所在的页面。
第一个问题是UIPageControl落后于UIScrollView。 第二个问题是,当你尝试进入第二页时它会滚动离开第一页(如果我发布图像并且它在后面可见)。 第三个问题是,我认为它没有显示用户所在的页面(虽然它可能有效,但由于第二个问题我无法看到!)
我对XCode相当新,但已经使用了几个星期所以我不是一个完全的业余爱好者。我一直在寻找一个解决方案,现在似乎找不到任何其他东西。对不起,如果以前出现过这个问题,我就找不到了!
这是我的代码:
HomeViewController.h
#import <UIKit/UIKit.h>
@interface HomeViewController : UIViewController {
UIScrollView *scrollView;
UIPageControl *pageControl;
}
@property (nonatomic, retain) IBOutlet UIScrollView *scrollView;
@property (nonatomic, retain) IBOutlet UIPageControl *pageControl;
@end
HomeViewController.m
#import "HomeViewController.h"
@implementation HomeViewController
@synthesize scrollView;
@synthesize pageControl;
- (void)viewDidLoad
{
[super viewDidLoad];
NSArray *colors = [NSArray arrayWithObjects:[UIColor colorWithPatternImage:[UIImage imageNamed:@"SuperflyPoster_1.jpg"]], [UIColor colorWithPatternImage:[UIImage imageNamed:@"SuperflyPoster_2.jpg"]], [UIColor blueColor], nil];
for (int i = 0; i < colors.count; i++) {
CGRect frame = scrollView.frame;
frame.origin.x = frame.size.width *i;
frame.origin.y = 0;
frame.size = self.scrollView.frame.size;
UIView *subview = [[UIView alloc] initWithFrame:frame];
subview.backgroundColor = [colors objectAtIndex:i];
[self.scrollView addSubview:subview];
[subview release];
}
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width *colors.count, self.scrollView.frame.size.height);
}
- (void)scrollViewDidScroll:(UIScrollView *)sender
{
// Update the page when more than 50% of the previous/next page is visible
CGFloat pageWidth = self.scrollView.frame.size.width;
int page = floor((self.scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
self.pageControl.currentPage = page;
}
- (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)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
self.scrollView = nil;
}
- (void)dealloc {
[pageControl release];
[scrollView release];
[super dealloc];
}
@end
非常感谢。
答案 0 :(得分:2)
真诚地,您遇到的问题也是我遇到的所有问题。所以,我写了一个PagedImageScrollView来简化它,也许你也可以从中学习,这里是链接
希望能提供帮助。玩得开心。
答案 1 :(得分:1)
虽然这篇文章相当陈旧,但由于我在这里寻求帮助并且之后自己解决了问题,我认为答案可能对其他人有所帮助。
问题1&amp; 2:你的第一个和第二个问题的原因是因为当你将UIPageControl拖到故事板中时,你可能把它放在你的scrollview上,这使它成为scrollview的子视图。在将图像或其他内容添加到滚动视图后,新内容将覆盖UIPageControl,并且由于pageControl是滚动视图的子视图,因此它将滚动内容,并滚动屏幕。
解决1&amp; 2:您应该将UIPageControl和ScrollView与子视图放在与Controller的基本视图相同的级别,并且UIPageControl应该出现在“文档大纲”中的UIScrollview下面(文档大纲的下方表示在视图的前面)。要执行此操作,您可能需要先在UIPageControl中拖动,然后在滚动视图中拖动,调整滚动视图的大小,然后在“文档大纲”中切换它们的位置。
问题3:您似乎正确设置了pageControl的页面,如果您可以看到您的页面控件,它可能已经正常工作。您应该将scrollView的enable paging设置为YES。