UIScrollViewの中身をズームアウトした際、左上(0,0)に自動的に戻ってしまう点を修正
kuniです。
UIScrollViewにaddSubViewした時、
ズームインした時は問題ないのですが、
ズームアウトした時、中のViewが自動的に左上に戻ってしまいますよね。
プロパティで簡単に切れない物か・・と思ったのですが、
特に無いようなので、delegateメソッド「scrollViewDidScroll」に
位置調整を入れ、回避しました。
———-
- (void)scrollViewDidScroll:(UIScrollView *)_scrollView{
//ここでズームの変更も拾えるので、サイズを設定する//
CGRect newRect = scrollView.frame;
//firstWidthにはScrollViewの最初の幅が入っている
if(firstWidth < imgView.frame.size.width){//超えた場合は0に//
newRect.origin.x = 0;
}else{
CGFloat fTemp = (firstWidth – imgView.frame.size.width) / 2;
newRect.origin.x = fTemp;
}
//firstHeightにはScrollViewの最初の高さが入っている
if(firstHeight < imgView.frame.size.height){
newRect.origin.y = 0;
}else{
CGFloat fTemp = (firstHeight – imgView.frame.size.height) / 2;
newRect.origin.y = fTemp;
}
scrollView.frame = newRect;
}
———-
ただ、ご察しの通り、少し問題もあって、
UIScrollViewの位置自体を変更しているので、
例えばズームアウトして縮小した場合、
UIScrollViewは画面真ん中の方に来ることになるので、
左上の方をつまんでも、反応しなくなります。
それでも、左上に行ってしまうよりはいいと思うので、
このまま使おうと思います。
※他の方法としては、scrollViewに一定の大きさの透明のViewを
もう一つ敷いておく、とかでしょうか。
