Swift:如何将 MapView 放入 UIView(?)

Posted

技术标签:

【中文标题】Swift:如何将 MapView 放入 UIView(?)【英文标题】:Swift: How to put a MapView in UIView (?) 【发布时间】:2016-08-01 22:58:37 【问题描述】:

我是编程新手,所以我需要一点帮助。我用 Swift 编写而不使用 Storyboard。如果你可以这么说,我想添加一个 MKMapView(?)?在 UIView 上。问题是我不能这样做,因为它不能将值/类型转换为 UIView。我必须将它写在 UIViewController 类中。我将如何解决这个问题?我不知道我必须给你看哪些代码......

但我的应用看起来与链接中视频中的应用几乎相同。 look att 5:08

我想在其中一个单元格中放置一个地图。

希望有人可以帮助我!:)

编辑:我添加代码

这是我正在使用的“地图”代码:

    import UIKit
import MapKit

class ViewController: UIViewController 

var window: UIWindow?
var mapView: MKMapView?

override func viewDidLoad() 
    super.viewDidLoad()

    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    self.view.backgroundColor = UIColor.whiteColor()

    self.mapView = MKMapView(frame: CGRectMake(0, 20, (self.window?.frame.width)!, 300))
    self.view.addSubview(self.mapView!)





在这个块中(如果你可以这么说?)我可以更改我想要的单元格。您可以看到我已将颜色更改为红色。我认为我必须在那里实现 Map 但我不能。

import UIKit

import MapKit


class MapCell1: MapCell, MKMapViewDelegate 



override func setupViews() 


        backgroundColor = UIColor.redColor()






而MapCell1是MapCell的子类,Mapcell长这样:

import UIKit
class MapCell: BaseCell, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout 

    let collectionView: UICollectionView = 
    let layout = UICollectionViewFlowLayout()
    let cv = UICollectionView(frame: CGRectZero, collectionViewLayout: layout)
    cv.backgroundColor = UIColor.grayColor() //Here can I change the color in the whole UIcollectionView. So every three cells are gray right now.
    return cv
()



let cellId = "cellId"

override func setupViews() 
    super.setupViews()


    addSubview(collectionView)
    addconstraintsWithFormat("H:|[v0]|", views: collectionView)
    addconstraintsWithFormat("V:|[v0]|", views: collectionView)





我不知道这些代码是否有帮助,但我也添加了它们。

 import UIKit

class BaseCell: UICollectionViewCell 
override init(frame: CGRect) 
    super.init(frame: frame)
    setupViews()


func setupViews() 



required init?(coder aDecoder: NSCoder) 
    fatalError("init(coder:) has not been implemented")



class BaseCell: UICollectionViewCell 


    func setupViews() 

    




    import UIKit

class MenuBar: UIView, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout 

lazy var collectionView: UICollectionView = 
    let layout = UICollectionViewFlowLayout()
    let cv = UICollectionView(frame: .zero, collectionViewLayout: layout)
    cv.backgroundColor = UIColor.rgb(61, green: 91, blue: 151)
    cv.dataSource = self
    cv.delegate = self
    return cv
()

let cellId = "cellId"
let imageNames = ["LocationMarker", "MapFeed", "ProfilePicture" ]

var viewController: ViewController?

override init(frame: CGRect) 
    super.init(frame: frame)

    collectionView.registerClass(MenuCell.self, forCellWithReuseIdentifier: cellId)

    addSubview(collectionView)
    addconstraintsWithFormat("H:|[v0]|", views: collectionView)
    addconstraintsWithFormat("V:|[v0]|", views: collectionView)

    let selectedIndexPath = NSIndexPath(forItem: 0, inSection: 0)
    collectionView.selectItemAtIndexPath(selectedIndexPath, animated: false, scrollPosition: .None)

    setupHorizontalBar()


var horizontalBarLefAnchorConstraint: NSLayoutConstraint?

func setupHorizontalBar() 
    let horizontalBarView = UIView()
    horizontalBarView.backgroundColor = UIColor.whiteColor()
    horizontalBarView.translatesAutoresizingMaskIntoConstraints = false
    addSubview(horizontalBarView)

    horizontalBarLefAnchorConstraint = horizontalBarView.leftAnchor.constraintEqualToAnchor(self.leftAnchor)
    horizontalBarLefAnchorConstraint?.active = true
    horizontalBarView.bottomAnchor.constraintEqualToAnchor(self.bottomAnchor).active = true
    horizontalBarView.widthAnchor.constraintEqualToAnchor(self.widthAnchor, multiplier: 1/4).active = true
    horizontalBarView.heightAnchor.constraintEqualToConstant(4).active = true


func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) 

//        print(indexPath.item)
//        let x = CGFloat(indexPath.item) * frame.width / 2.65
//        horizontalBarLefAnchorConstraint?.constant = x
//        
//        UIView.animateWithDuration(0.75, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .CurveEaseOut, animations: 
//            self.layoutIfNeeded()
// 

       , completion: nil)

    viewController?.scrollToMenuIndex(indexPath.item)




func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    return 3


func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(cellId, forIndexPath: indexPath) as! MenuCell

    cell.imageView.image = UIImage(named: imageNames[indexPath.item])?.imageWithRenderingMode(.AlwaysTemplate)
    cell.tintColor = UIColor.rgb(39, green: 58, blue: 97)

    return cell


func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize 
    return CGSizeMake(frame.width / 3, frame.height)


func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat 
    return 0


required init?(coder aDecoder: NSCoder) 
    fatalError("init(coder:) has not been implemented")





class MenuCell: BaseCell 

let imageView: UIImageView = 
    let iv = UIImageView()
    iv.image = UIImage(named: "LocationMarker")?.imageWithRenderingMode(.AlwaysTemplate)
    iv.tintColor = UIColor.rgb(39, green: 58, blue: 97)
    return iv
()

override var highlighted: Bool 
    didSet 
        imageView.tintColor = highlighted ? UIColor.whiteColor() : UIColor.rgb(39, green: 58, blue: 97)
    


override var selected: Bool 
    didSet 
        imageView.tintColor = selected ? UIColor.whiteColor() : UIColor.rgb(39, green: 58, blue: 97)
    

override func setupViews() 
    super.setupViews()

    addSubview(imageView)
    addconstraintsWithFormat("H:[v0(28)]", views: imageView)
    addconstraintsWithFormat("V:[v0(28)]", views: imageView)

    addConstraint(NSLayoutConstraint(item: imageView, attribute: .CenterX, relatedBy: .Equal, toItem: self, attribute: .CenterX, multiplier: 1, constant: 0))
    addConstraint(NSLayoutConstraint(item: imageView, attribute: .CenterY, relatedBy: .Equal, toItem: self, attribute: .CenterY, multiplier: 1, constant: 0))




【问题讨论】:

请在问题中添加代码。视频可能会随着时间的推移而消失,观看视频是人们回答您问题的高门槛。欢迎来到本站。请尽可能详细地格式化您的问题,以便答案可以帮助他人和您自己。 正如@BlueJ774 所说,这对于清楚地解释您的问题很重要。还要尝试解释您解决该问题的尝试。这样,其他人会看到您不仅在等待答案,而且他们不必猜测您是否已经尝试过(您不会有已经尝试过的答案;))。一个很好的例子是添加相关问题的链接,或指向您尝试过的教程的链接。 感谢您的回复和提示,我现在添加了 som 代码,希望对您有所帮助:) 【参考方案1】:

使用 MKMapView 将自定义类设置为您的视图。

【讨论】:

为您的视图添加 MKMapView 非常感谢。这是我找不到的。【参考方案2】:

嗯...我想这就是你想要的

import MapKit

func initMapView() 
    let mapView = MKMapView()
    mapView.delegate = self
    ...
    self.view.addSubView(mapView)

【讨论】:

您好,感谢您的回复!更准确的意思是什么?我现在在问题中添加了一些代码,如果它可以帮助您给出答案。

以上是关于Swift:如何将 MapView 放入 UIView(?)的主要内容,如果未能解决你的问题,请参考以下文章

当我们在swift中使用MKMapView点击mapView时如何移动到第二个Viewcontroller?

添加手势识别器以允许在 Swift 中的 MapView 上水平滑动

每次移动 UISlider 时删除注释 - mapView, Swift

(Swift 3)如何向MapView添加多个引脚

如何在 Swift 3 中的 mapview 上生成不同的图钉?

带有默认地图视图引脚的 Swift Mapview 自定义调出视图