2016-04-18 12 views
1

私のアプリには国のリストがあります。ユーザーが国のいずれかをクリックできるようにしたい(Aボタン)と、その地図上でその国をズームする。私は生のpngファイルからの座標を持っていますが、scrollViewsフレームサイズ(幅または高さ)をimageViewsイメージサイズ(幅または高さ)で割った座標にcontentOffSetを掛けた値を設定すると、私が選ぶ国。UIScrollの生の画像から座標をズームインするSwiftのビュー

は、テストの目的のために、私は変数に座標を設定します。ここでは

は、私がこれまで持っているものです。これらはユーザーが選択した内容に基づいて変更されます。また、テスト目的のために、ビューを読み込むと、自動的にアフガニスタンのボタンをクリックすると実行されるコードが実行されます。

@IBOutlet var scrollView: UIScrollView! 
@IBOutlet var mapImageView: UIImageView! 

override func viewDidLoad() { 

    var xScale = scrollView.frame.size.width/mapImageView.image?.size.width 

    var yScale = scrollView.frame.size.height/mapImageView.image?.size.height 

    var xCord = 3090 
    var yCord = 1280 

    scrollView.zoomScale = 3 

    scrollView.contentOffset = CGPointMake((x * xScale) - (scrollView.bounds.size.width/2), (y * yScale) - (scrollView.bounds.size.height/2)) 

} 

国を表示することもできますので、国のサイズに基づいてzoomScaleを計算するための式を使用します。テスト目的のために私はscrollView.zoomScale = 3を設定しました。私が拡大しようとしている国はアフガニスタンです。しかし、scrollView.zoomScaleは、ユーザーが選択した国に基づいて変更されることに注意してください。

ここにはmapが使用されています。アフガニスタンは黄色で強調表示されています。

わかりやすくするために、scrollViewには、上にリンクしたマップ画像を保持するimageViewが含まれています。

解説のために、コードは、(生の画像ファイルからの)座標と式(上記のコードではなく書面による)を介して計算された座標に対して汎用でなければなりません。

私の結論は、私が生の画像ファイル(特にマップ画像)から収集した座標を使用して、私が収集した座標に私のscrollViews可視部分を配置する方法です。

答えて

0

私は問題を把握しました。私の理論は、コンテンツのサイズを設定する前に、コンテンツのサイズが生成するのに十分な時間がなかったことです。とにかく、setDefApearメソッドにコンテンツを追加して、viewDidLoadにzoomScaleの設定を追加しました。また、scrollView.contentModeUIViewContentMode.Redrawに変更しました。アニメーションを追加するためにsetContentOffsetを使用しました。任意のzoomScale値で完全に機能します。ここに私のコードは...

@IBOutlet var scrollView: UIScrollView! 
@IBOutlet var mapImageView: UIImageView! 

override func viewDidLoad() { 

    scrollView.zoomScale = 5 

} 

override func viewDidAppear(animated: Bool) { 

     let xScale = scrollView.contentSize.width/(mapImageView.image?.size.width)! 
     let yScale = scrollView.contentSize.height/(mapImageView.image?.size.height)! 

     let xCord:CGFloat = 3090 
     let yCord:CGFloat = 1280 

     scrollView.setContentOffset(CGPointMake((xCord * xScale) - (scrollView.bounds.width/2), (yCord * yScale) - scrollView.bounds.height/2), animated: true) 

     scrollView.delegate = self 
     scrollView.contentMode = UIViewContentMode.Redraw 

} 
関連する問題