Помещение UIPageControl поверх UIScrollView - PullRequest
1 голос
/ 06 марта 2012

У меня есть 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

Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 13 июля 2013
  • проблема 1: если вы используете раскадровку для компоновки ваших представлений, то есть потому, что вы помещаете scrollview перед представлением управления страницами, если вы используете addSubview для добавления, то есть потому, что вы сначала добавляете pagecontrol, потом scrollview.
  • решение проблемы 1: поместите scrollview на первое, pagecontrolview - на второе.
  • проблема 2: это потому, что ваш pagecontrolview является подпредставлением scrollview, что неправильно, scrollview и pagecrontrolview должныбыть в том же слое.
  • решение проблемы 2: просто сделайте их на одном слое.
  • задача 3, вы можете увидеть мой код.

С уважением,проблемы, с которыми вы сталкиваетесь, - это тоже все проблемы, с которыми я встречался.Итак, я написал PagedImageScrollView, чтобы сделать его простым, и, возможно, вы также можете извлечь из него уроки, вот ссылка


PagedImageScrollView


Надеждыпомогать.Веселитесь.

1 голос
/ 30 декабря 2012

Хотя этот пост довольно старый, и, поскольку я искал здесь помощь и сам решил проблему, думаю, ответ может помочь другим.

Проблема 1 и 2. Причина первой и второй проблемы заключается в том, что когда вы перетаскиваете UIPageControl в раскадровку, вы, вероятно, помещаете его в представление прокрутки, что делает его подпредставлением просмотра прокрутки.И после того, как вы добавите Image или другое содержимое в представление прокрутки, новое содержимое будет покрывать UIPageControl, а поскольку pageControl является подпредставлением представления прокрутки, оно будет прокручиваться вместе с содержимым и выключать экран.

Решить 1 и 2. Вы должны поместить UIPageControl и ScrollView на том же уровне, что и подвиды, в базовое представление контроллера, а UIPageControl должен отображаться под UIScrollview в «Контур документа» (ниже в схеме документа).значит спереди на виду).Чтобы сделать это, вы можете сначала перетащить элемент управления UIPageControl, а затем перетащить его в представление прокрутки, изменить размер окна прокрутки, а затем поменять их положения в «Контуре документа».

Проблема 3: Кажется, что выНастройте страницу pageControl правильно, если вы видите свой pagecontrol, он может уже работать.И вы должны установить для функции scrollView для пейджинга значение YES.

...