2017-03-04 67 views
1

我有一個視圖控制器與滾動視圖,其次是在視圖內的地圖狀圖像。在地圖圖像的頂部,我有16個不同的按鈕指向地圖圖像上的不同部分。到目前爲止,我可以放大和縮小地圖,但16個按鈕不會跟隨並散開。如何將按鈕附加或鎖定到地圖圖像上,以便它們隨地圖放大和縮小。截至目前,我的地圖視圖控制器中我有這樣的:(在此先感謝的答案!)Xcode 8/Swift 3 - 如何將按鈕約束鎖定到縮放圖像,以便縮放圖像?

import UIKit 

class MapppViewController: UIViewController, UIScrollViewDelegate { 

@IBOutlet weak var mainScrollView: UIScrollView! 
@IBOutlet weak var mapImageView: UIImageView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.mainScrollView.minimumZoomScale = 1.0 
    self.mainScrollView.maximumZoomScale = 5.0 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 

func viewForZooming(in scrollView: UIScrollView) -> UIView? 
{ 
    return self.mapImageView 
+0

「在地圖圖像的頂部」 但他們沒有子視圖?他們是什麼?顯示銷釘按鈕如何到達那裏。 – matt

+0

我是新來的xcode,所以我不確定你的意思?下面是我所擁有的照片:http://i68.tinypic.com/2lxwoeo.png –

+0

對,這些不是地圖圖像視圖的子視圖。如果您將它們設置爲子視圖,則在地圖放大時它們將保持靜止不動(儘管默認情況下,它們會在地圖縮放時增大/縮小;但是,您可以更改它)。 – matt

回答

0

在一個粗略的辦法,我想這是諸如此類的事情,你後:

enter image description here

您可以通過使圖像視圖的按鈕子視圖或(如我在這裏所做的那樣)通過使「容器視圖」的按鈕和圖像視圖子視圖實現,該容器視圖除了成爲滾動視圖的可縮放子視圖。

這是我的看法層次:

enter image description here

這裏的唯一代碼:

class ViewController: UIViewController, UIScrollViewDelegate { 

    @IBOutlet weak var sv: UIScrollView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.sv.minimumZoomScale = 1 
     self.sv.maximumZoomScale = 2 
    } 

    func viewForZooming(in scrollView: UIScrollView) -> UIView? { 
     return scrollView.viewWithTag(999) // the container view 
    } 

} 
+0

非常感謝你@matt這正是我在找的東西,在互聯網上的任何地方都找不到它。我非常感謝你的幫助!你真棒! –

+0

嗨@matt另一個問題給你。在完成上述步驟後,限制按鈕的最佳方式是什麼,以便在不同的設備上按鈕保持鎖定在地圖上的位置?在放大和縮小我製作的設備(iPhone 7)時,它的效果很好,但在其他設備上,我無法弄清楚如何添加變成藍色的約束。我看過谷歌,但顯示約束的每個頁面/教程都沒有我擁有的層次結構/設置類型。提前致謝。我是新來的... –

+0

最簡單的是_no_約束。只要地圖在每個設備上的大小相同,按鈕就會位於正確的位置。否則,你必須根據圖像大小的_percentage_('multiplier')來確定按鈕的頂部/左邊,以使它們位於地圖的同一個地方。 – matt