将UIPageControl放置在UIScrollView的顶部

将UIPageControl放置在UIScrollView的顶部,uiscrollview,paging,uipagecontrol,Uiscrollview,Paging,Uipagecontrol,我有一个UIScrollView显示三个图像(目前有两个UIImages和一个UIColor,因为我还没有收到第三个图形),我一直在尝试添加UIPageControl,但有一些问题 我需要UIPageControl有一个透明的背景(在IB中很容易),然后让它位于UIScrollView的顶部,显示用户所在的页面 第一个问题是UIPageControl位于UIScrollView后面。 第二个问题是,当你尝试进入第二个页面时,它会随着第一个页面一起滚动(如果我将图像文本输出,并且图像后面可见)。

我有一个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:UIViewController{
UIScrollView*滚动视图;
ui页面控件*页面控件;
}
@属性(非原子,保留)IBMOutlet UIScrollView*scrollView;
@属性(非原子,保留)IBUIPageControl*pageControl;
@结束
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
#导入“HomeViewController.h”
@HomeViewController的实现
@综合滚动视图;
@综合页面控制;
-(无效)viewDidLoad
{
[超级视图下载];
NSArray*colors=[NSArray arrayWithObjects:[UIColor WithPatternImage:[UIImage ImageName:@“SuperflyPoster_1.jpg”],[UIColor WithPatternImage:[UIImage ImageName:@“SuperflyPoster_2.jpg”],[UIColor blueColor],nil];
对于(int i=0;i

非常感谢。

虽然这篇文章已经很老了,而且我在这里搜索了帮助,后来自己解决了这个问题,但我认为一个答案可能会对其他人有所帮助

问题1和2:出现第一个和第二个问题的原因是,当您将UIPageControl拖动到情节提要中时,您可能会将其放在scrollview上,从而使其成为scrollview的子视图。在向滚动视图中添加图像或其他内容后,新内容将覆盖UIPageControl,并且由于pageControl是滚动视图的子视图,因此它将随内容滚动,并从屏幕上滚下

解决方案1和2:应将UIPageControl和ScrollView与控制器基础视图的子视图放在同一级别,并且UIPageControl应在“文档大纲”中的UIScrollview下方(文档大纲中的下部表示视图中的前部)。为此,您可能需要先拖动UIPageControl,然后拖动scrollview,调整scrollview的大小,然后切换它们在“文档大纲”中的位置

问题3:您似乎正确设置了pageControl的页面,如果您可以看到您的pageControl,它可能已经工作了。您应该将scrollView的EnablePaging设置为YES

  • 问题1:如果您使用故事板来布局视图,那是因为您将scrollview放在pagecontrol视图之前,如果您使用addSubview来添加,那是因为您首先添加pagecontrol,然后添加scrollview
  • 问题1解决方案:将scrollview放在第一位,将pagecontrolview放在第二位
  • 问题2:这是因为您的pagecontrolview是scrollview的子视图,这是错误的,scrollview和pagecrontrolview应该在同一层中
  • 问题2解决方案:将它们放在同一层上
  • 问题3,你可以看到我的代码
说实话,你遇到的问题也是我遇到的所有问题。所以,我写了一个PagedImageScrollView来简化它,也许你也可以从中学习,这里是链接



希望能有所帮助。玩得开心