追加自体は簡単で UIPageControl のインスタンスを作成し、表示したい UIViewに追加するだけ。
// setup page control CGRect pageControlFrame = CGRectMake( 0, self.bounds.size.height-DEFAULT_MARGIN_HEIGHT, self.bounds.size.width, DEFAULT_MARGIN_HEIGHT); self.pageControl = [[[UIPageControl alloc] initWithFrame:pageControlFrame] autorelease]; self.pageControl.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleBottomMargin; self.pageControl.hidesForSinglePage = NO; [self.pageControl addTarget:self action:@selector(pageControlDidChange:) forControlEvents:UIControlEventValueChanged]; [self addSubview:self.pageControl];
今回少し手間取ったのは UIPageControl をクリックした時の処理。UIControlEventValueChanged イベントが発生すると addTarget:action:forControlEvents: で指定したメソッドが呼び出されるので、この中で指でスクロールした時と同じ処理を行う必要がある。スクロール位置を決めるのに -[UIScrollView scrollRectToVisible:animated:] を使ってみたが、動作が怪しくなったので UIScrollView.contentOffset の指定に切り替えた。このままだとアニメーションしないので +[UIView beginAnimations:context:] で囲ってやる。
[UIView beginAnimations:nil context:nil]; self.scrollView.contentOffset = CGPointMake( self.contentOffsetIndex*size.width, 0); [UIView commitAnimations];
ソースコードは GitHub からどうぞ。
EasyGallery at 2010-09-29 from xcatsan's iOS-Sample-Code - GitHub
参考情報
UIPageControl の扱いは下記が参考になった。
匿名
2011年2月23日 1:38
はじめまして。
ソースコードを参考にさせていただきました。
ところで、このPageControlなんですが、カレントのページを基準に
前後1ページにしか切り替わらないと思うんですが、ダイレクトに指定ページへ
遷移させるにはどうすれば良いのでしょうか?
匿名
2011年2月23日 1:38
はじめまして。
ソースコードを参考にさせていただきました。
ところで、このPageControlなんですが、カレントのページを基準に
前後1ページにしか切り替わらないと思うんですが、ダイレクトに指定ページへ
遷移させるにはどうすれば良いのでしょうか?
xcatsan says:
2011年2月24日 13:08
こんにちは。
ダイレクトに指定ページへ遷移させるには UIScollView をそのページ位置へスクロールさせます。この後の連載で取り上げているので良かったら参考にしてみてください。
http://cocoadays.blogspot.com/2010/10/19.html
xcatsan says:
2011年2月24日 13:08
こんにちは。
ダイレクトに指定ページへ遷移させるには UIScollView をそのページ位置へスクロールさせます。この後の連載で取り上げているので良かったら参考にしてみてください。
http://cocoadays.blogspot.com/2010/10/19.html