Scroll view çok kullanışlı bir iOS componenti diyebiliriz. ScrollView iOS arayüzünün hemen hemen her yerinde kullanılıyor. “iPhone’nun ana ekranındaki şifre alanında, TableViewController’ın listeleme alanında, Menülerin listelendiği alanda bile ScrollView kullanılıyor.” Ben de ufak da olsa storyboard kullanarak nasıl yapıldığını hem kendim anlayıp hem de blog da paylaşayım istedim.
İlk olarak yapmamız gereken proje oluşturmak, sonrasında viewcontroller’ımızın içine “Object Library” den bir adet ScrollView tutup ViewControllerımıza atmak. Daha sonrasında “Connection Inspector” den delegate’i bizim ViewControllera vermek kalıyor. Bundan sonraki işlemler de ScrollView’in içinde kullancağımız viewcontrollerı oluşturmak.
Yine aynı Object Library’den iki tane ViewController sürükleyip storyboard’a bırakın. Daha sonra bunlara sınıf oluşturun. “Ben FirstViewController ve SecondViewController” yaptım. Bir tane de button oluşturup yine ilk ViewControllerımızın görünür bir yerine atın. Butona tıklayarak bir action oluşturun. Daha sonra sayfa gelişlerinde kullnacağız. Main ViewController sınıfımıza “bu ViewController.m” anlamına geliyor. Girelim ve “viewDidload” satırına aşağıdaki kodları ekleyelim.
Uygulamada scrollview, firstvc ve secondvc bunları çekmek içinde mainStoryboard özelliği oluşturduk.
@property (weak, nonatomic) IBOutlet UIScrollView *scrollVC;
@property (nonatomic,strong) FirstViewController *firstVC;
@property (nonatomic,strong) SecondViewController *secondVC;
@property (nonatomic,strong) UIStoryboard *mainStoryboard;
Lazy Instantiation en sevdiğim 😀 ViewControllarımızı kolayca oluşturuyoruz!
-(FirstViewController *)firstVC
{
if(!_firstVC) {
_firstVC = [_mainStoryboard instantiateViewControllerWithIdentifier:@"FirstViewController"];
}
return _firstVC;
}
- (SecondViewController *)secondVC
{
if(!_secondVC) {
_secondVC = [_mainStoryboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
}
return _secondVC;
}
ViewDidLoad gerekli işlemleri yaptığımız kod bloğu.
self.mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
CGRect frame;
frame.origin.x = self.scrollVC.frame.size.width * 2;
frame.origin.y = 0;
frame.size = self.scrollVC.frame.size;
self.scrollVC.autoresizingMask = YES;
self.scrollVC.contentSize = CGSizeMake(self.scrollVC.frame.size.width * 2, self.scrollVC.frame.size.height);
[self.secondVC.view setFrame:CGRectMake(self.scrollVC.frame.size.width, 0,
self.secondVC.view.frame.size.width, self.secondVC.view.frame.size.height)];
[self.scrollVC addSubview:self.firstVC.view];
[self.scrollVC addSubview:self.secondVC.view];
Buttona tıkladığında bir sonraki sayfaya geçmek için kullanıyoruz.
- (IBAction)gotoNextPage:(id)sender
{
[UIView animateWithDuration:0.9 animations:^{
[self.scrollVC setContentOffset:CGPointMake(self.firstVC.view.frame.size.width, self.scrollVC.frame.origin.y) animated:NO];
}];
}
Kaynak : http://stackoverflow.com/questions/5977640/uiscrollview-and-setcontentoffset
Projenin kaynak dosyasını indirmek için : Github sayfasını ziyaret edin.