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