Titanium Mobile にて、iPhone にデフォルトでインストールされている「写真アプリ」みたいにダブルタップやピンチイン・ピンチアウトで画像の拡大・縮小させる実装方法を教えてください。
実現したいこと
- ピンチインで拡大、ピンチアウトで縮小
- 画像を拡大した状態でスクロールして、
- ダブルタップで拡大/縮小
(1) と (2) については、下記の記事を参考にして、scrollView 上に imageView を載せることで、実現させています。
しかし、(3) については、zoomToRect がTitaniumでは用意されていないため、
ダブルタップを検出した後、プログラムで拡大処理を行う必要がある。UIScrollViewにはその為のメソッドが用意されているのでこれを使う。
zoomToRect:animated:[引用元]: Cocoaの日々: 簡易スライドビューア [3] ダブルタップで拡大
http://cocoadays.blogspot.jp/2010/09/3.html
代替案として、下記のようにダブルタップされたときに、画像のサイズが拡大率最小の場合、最大サイズに拡大して、タップされた座標にスクロールし、画像のサイズが拡大中(拡大率最小でない)の場合、最小サイズに縮小して、ベースの座標にスクロールするという実装をしています。
scrollView = Ti.UI.createScrollView({
maxZoomScale: 2.0,
minZoomScale: 1.0
});
imageView = Ti.UI.createImageView({
image : 'images/example.jpg'
});
// ダブルタップで画像を拡大する
imageView.addEventListener('doubletap', function(e){
var scrollView = e.source.getParent();
var minZoomScale = scrollView.minZoomScale;
var maxZoomScale = scrollView.maxZoomScale;
if (scrollView.zoomScale === minZoomScale){
var newX = e.x;
var newY = e.y;
scrollView.setZoomScale(maxZoomScale);
scrollView.contentOffset = {x:newX, y:newY};
}else{
scrollView.setZoomScale(minZoomScale);
scrollView.contentOffset = {x:0, y:0};
}
});
scrollView.add(imageView);しかし、この実装だとダブルタップしたときのズームインの動きがスムーズではなく、zoomToRect を使用して実装したいと考えています。
こういう場合、Titanium Mobile には、現状 zoomToRect に対応するものが用意されていないようなので、自分で iPhone 用のモジュールを Objective-C で書くしかないでしょうか?
よろしくお願いします。
