首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xcode,删除subView

Xcode,删除subView
EN

Stack Overflow用户
提问于 2018-02-07 02:26:21
回答 1查看 103关注 0票数 0

我有一个应用程序,可以显示不同时间的家庭位置。我使用计时器每1秒提前日期,每年从核心数据中检索数据,并使用subView在视图上绘制一个对象,并覆盖一个映射。我无法理解的是,每年前进一次,如何清除subView。欢迎提出建议。

计时器代码:

代码语言:javascript
复制
  @IBAction func startCount(_ sender: Any) {

        if !counting {
        timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(counter), userInfo: nil, repeats: true)
        counting = true
    }
}

计数器代码:

代码语言:javascript
复制
  @objc func counter() -> Void {
    yearCount.text = String(countYear)
    compareYear = String(countYear)
    print(compareYear)
    drawCircles()
    countYear += 1
}

绘制圆圈代码:

代码语言:javascript
复制
  func drawCircles() {

         if markerView != nil {
        if let markerView = view.viewWithTag(countYear-1){
        markerView.removeFromSuperview()
        }
    }

    var markers = [PlaceNames]()
    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "PlaceNames")
    let predicate = NSPredicate(format: "year == %@", compareYear)
    fetchRequest.predicate = predicate

    do {
        markers = try coreDataStack.context.fetch(fetchRequest) as! [PlaceNames]
        print(markers.count)

    } catch let error as NSError {
        print("Could not fetch \(error), \(error.userInfo)")
    }

        for marker in markers {

            placeEastings = marker.value(forKey: "eastings") as? Float
            placeNorthings = marker.value(forKey: "northings") as? Float
            print(placeEastings, placeNorthings)

            if (placeEastings != nil && placeNorthings != nil) {

            let tempXAxis = placeEastings
            placeXAxis = (tempXAxis! - 6.0)/1.5
            let tempYAxis = placeNorthings
            placeYAxis = (tempYAxis! - 6.0)/1.5
                print(placeXAxis, placeYAxis)
            }

            markerView = UIImageView(frame: CGRect(x: Double(placeXAxis), y: Double(placeYAxis), width: 12.0, height: 12.0))

            let renderer = UIGraphicsImageRenderer(size: CGSize(width: 12, height: 12))

            markerImage = renderer.image { ctx in
                let rectangle = CGRect(x: 0, y: 0, width: 12, height: 12)
                ctx.cgContext.setFillColor(UIColor.white.cgColor)
                ctx.cgContext.setStrokeColor(UIColor.black.cgColor)
                ctx.cgContext.setLineWidth(1)

                ctx.cgContext.addEllipse(in: rectangle)
                ctx.cgContext.drawPath(using: .fillStroke)
            }

            markerView.tag = countYear
            markerView.image = markerImage

            self.view.addSubview(markerView)
    }
}     
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-07 04:09:07

我认为您可以将所有markerViews存储在数组中,比如var markerViews: [UIImageView],然后

代码语言:javascript
复制
@objc func counter() -> Void {
    yearCount.text = String(countYear)
    compareYear = String(countYear)
    print(compareYear)

    clearExistingMarkerViews()
    drawCircles()
    countYear += 1
}

private func clearExistingMarkerViews() {
    markerViews.forEach { $0.removeFromSuperView() }
   markerViews.removeAll()
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48655013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档