SORU
29 Kasım 2012, PERŞEMBE


UİPageViewController, nasıl düzgün sipariş veri kaynağı tarafından belirtilen bozmadan belirli bir sayfaya atlamak mı?

Belirli bir sayfa için UIPageViewController bir sıçrama yapmak için nasıl hakkında birkaç soru buldum ama cevapları yok kabul etmek gibi atlama ile ek bir sorun fark ettim.

Benim iOS app detaylara girmeden çağrı takvimine benzer olan), burada yaşıyorum. ** 3, bir dizi Geçerli Görünüm denetleyicisi ilan ediyorum, ve bir veri kaynağı uygulamak.

// end of the init method
        pageViewController = [[UIPageViewController alloc] 
        initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
          navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
                        options:nil];
        pageViewController.dataSource = self;
        [self jumpToDay:0];
}

//...

- (void)jumpToDay:(NSInteger)day {
        UIViewController *controller = [self dequeuePreviousDayViewControllerWithDaysBack:day];
        [pageViewController setViewControllers:@[controller]
                                    direction:UIPageViewControllerNavigationDirectionForward
                                     animated:YES
                                   completion:nil];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
        NSInteger days = ((THDayViewController *)viewController).daysAgo;
        return [self dequeuePreviousDayViewControllerWithDaysBack:days   1];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
        NSInteger days = ((THDayViewController *)viewController).daysAgo;
        return [self dequeuePreviousDayViewControllerWithDaysBack:days - 1];
}

- (UIViewController *)dequeuePreviousDayViewControllerWithDaysBack:(NSInteger)days {
        return [[THPreviousDayViewController alloc] initWithDaysAgo:days];
}

Edit Not: dequeuing yöntemi için basitleştirilmiş bir kod ekledim. Hatta bu kafir uygulama ile sayfa düzeni ile tam olarak aynı sorun bende de var.

Başlatma tüm beklendiği gibi çalışır. Artan belleği de gayet iyi çalışıyor. Sorun olursa ben hiç jumpToDay tekrar arama, düzeni karmakarışık olur.

Kullanıcı gün -5 gün atlar ise 1, sola doğru ilerleyin gün -5 daha uygun gün yerine 0 ortaya çıkaracaktır. Bu bir şey UIPageViewController yakındaki sayfalarda tutar nasıl bir ilgisi var gibi görünüyor, ama değil önbelleği yenilemek için zorlayacak bir yöntem herhangi bir referans bulamıyorum.

Herhangi bir fikir?

CEVAP
3 EYLÜL 2013, Salı


Matt Neuburg belgeleri tam olarak bu sorundan Programming iOS6, ve ben aslında onun çözümü biraz şu anda kabul cevabı çok daha iyi hissettiriyor bulundu. Harika çalışan bu çözüm,,, ve jarringly Bu sayfayı değiştirmek istediğiniz sayfa ile sonra/önce görüntüye animasyon olumsuz bir yan etkisi yoktur. Garip bir kullanıcı deneyimi gibi hissettim, ve Matt'in çözüm ilgileniyor.

__weak UIPageViewController* pvcw = pvc;
[pvc setViewControllers:@[page]
              direction:UIPageViewControllerNavigationDirectionForward
               animated:YES completion:^(BOOL finished) {
                   UIPageViewController* pvcs = pvcw;
                   if (!pvcs) return;
                   dispatch_async(dispatch_get_main_queue(), ^{
                       [pvcs setViewControllers:@[page]
                                  direction:UIPageViewControllerNavigationDirectionForward
                                   animated:NO completion:nil];
                   });
               }];

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Alan Fullmer

    Alan Fullmer

    3 EYLÜL 2010
  • rekjavicxxx

    rekjavicxxx

    28 EKİM 2007
  • Truc Minh

    Truc Minh

    23 Ocak 2011