2009-09-18 17 views
8

İçinde paging ile bir UIScrollView var (bu yüzden UIPageControl ile tipik bir model ve sayfalar arasında sol ve sağa sürükleyip/sürükleyerek). Bu iyi çalışıyor. Garip olan şey, sıçramaktan kurtulmak istediğimde (böylece sol ve sağ taraftaki UI'nin arkasında siyahı göremezsiniz), aniden çağrı yapmak artık işe yaramaz. Başka bir deyişle UIScrollView - (bounces = NO) geçersiz kılınmış görünüyor (pagingEnabled = YES)

:

scrollView.pagingEnabled = YES; 
scrollView.bounces = YES; 

herşey I dışında çalışıyor sayfasında (0) ve sayfanın (uzunluk-1) de sıçrayan sevmiyorum. Ama ne zaman bu:

scrollView.pagingEnabled = YES; 
scrollView.bounces = NO; 

yerine, her sayfada yerine yapışma bir uzun sayfa olarak birlikte tüm sayfaları tedavi durur. Öyle görünüyor ki, bazı sebeplerden dolayı, sayfalama sıçrayanlara bağımlıdır, bu da bir şekilde zıplamayı durdurabildiğim kadar iyidir. Yani, ondan kurtulmanın başka bir yolu var mı? Yoksa yanlış yaptığım bir şey mi var?

DÜZENLEME: çözüm:

@interface PagingScrollView : UIScrollView 
@end 

@implementation PagingScrollView 

- (id)initWithFrame:(CGRect)frame 
{ 
    if (self = [super initWithFrame:frame]) 
    { 
     self.pagingEnabled = YES; 
     self.bounces = YES; 
    } 
    return self; 
} 

- (void)setContentOffset:(CGPoint)offset 
{ 
    CGRect frame = [self frame]; 
    CGSize contentSize = [self contentSize]; 
    CGPoint contentOffset = [self contentOffset]; 

    // Clamp the offset. 
    if (offset.x <= 0) 
     offset.x = 0; 
    else if (offset.x > contentSize.width - frame.size.width) 
     offset.x = contentSize.width - frame.size.width; 

    if (offset.y <= 0) 
     offset.y = 0; 
    else if (offset.y > contentSize.height - frame.size.height) 
     offset.y = contentSize.height - frame.size.height; 

    // Update only if necessary 
    if (offset.x != contentOffset.x || offset.y != contentOffset.y) 
    { 
     [super setContentOffset:offset]; 
    } 
} 

@end 

cevap

9

Yapabileceğiniz en iyi şey bir UIScrollView alt sınıfı yazmak ve elle istenilen davranışı uygulamak olacaktır. Her ikisi de YES olarak ayarlanmış pagingEnabled ve bounces ile başlayabilmeniz ve -setContentOffset: üzerine yazarak kenarları kırpan kendi yönteminizle başlayabilmeniz gerekir.

+0

Vay, bu aptalca. Bunu deneyeceğim, sadece bu konudaki "büyük kazanan" olabilirsiniz. – Eli

+0

Çalışıyor, fakat -setContentOffset: -setContentOffset'i değil, her zaman çağrılmayan bir işlevi çağıracaktır, bu durumda, eski, contentOffset için mutator işlevini geçersiz kılar, böylece tüm vakaları yakalarsınız. – Eli

+0

Bu garip. Bu tür bir çok şey yapıyorum ve genellikle tek parametre yöntemi, animasyonlu varyantı animasyonlu olarak çağırır: EVET – rpetrich

İlgili konular