Сохранить представление UIScrollView - PullRequest
2 голосов
/ 17 ноября 2011

Я создаю приложение, часть которого позволяет вам прокручивать различные изображения для наложения. У меня есть сегментированный элемент управления для создания своего рода многоуровневой системы, в которой каждый сегмент позволяет вам снова прокручивать изображения и создавать слои. По какой-то причине первое изображение всегда прилипает, и когда я возвращаюсь к слою, вид сбрасывается в исходное положение, но также сохраняется последняя позиция?

Вот мой код.

- (void)layerControl
{
UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
scroll.pagingEnabled = YES;
NSInteger viewCount = 8;
for (int i = 0; i < viewCount; i++) {
    CGFloat yOrigin = i * self.view.frame.size.width;
    UIImageView *filterViewOverlay = [[UIImageView alloc] initWithFrame:CGRectMake(yOrigin, 0, self.view.frame.size.width, self.view.frame.size.height)];
    [filterViewOverlay setImage:[filterManager objectAtIndex:i]];
    [scroll addSubview:filterViewOverlay];
    //[filterViewOverlay release];
}
scroll.contentSize = CGSizeMake(self.view.frame.size.width * viewCount, self.view.frame.size.height);
[self.view addSubview:scroll];
[scroll autorelease];

//Determine the current filter in view of the scroll view
CGFloat pageWidth = scroll.frame.size.width;
int cFilter = floor((scroll.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
currentFilter = cFilter;

}



//Method to add a filter to the page
- (void)addFilter:(id)sender
{
UISegmentedControl *filterController = (UISegmentedControl *)sender;

switch ([filterController selectedSegmentIndex])
{
    case 0: self.layerControl;

    case 1: self.layerControl;

    case 2: self.layerControl;

    case 3: self.layerControl;

    case 4: self.layerControl;

    case 5: self.layerControl;

    default: NULL;
}
}

1 Ответ

0 голосов
/ 17 ноября 2011

Похоже, что каждый раз, когда вы вызываете self.layerControl, вы создаете новый UIScrollView для представления.Таким образом, старый все еще там и в старой позиции, но вы добавили еще одну.

Возможно, сохраните ссылку на каждый UIScrollView и в начале layerControl получите представление прокрутки для данного индекса.

Итак:

- (void)layerControl:(NSInteger)index {
   UIScrollView *scrollView = nil;
   switch (index) {
      case (0): scrollView = self.scrollView1;
      /* Repeat for 1 - 6 */
   }

   if (scrollView == nil) {
      // Do the creation of the scrollview here
   }

Тогда в вашем вызове метода addFilter:

[self layerControl:[filterController selectedSegmentIndex]]

, а не оператор большого переключателя.

Как бы то ни было, это не такотличная идея - вызывать методы с точечным синтаксисом, как у всех этих вызовов self.layerControl.Вы должны оставить синтаксис точки на время доступа к синтезированному свойству.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...