首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iOS自定义视图不会立即显示图像

iOS自定义视图不会立即显示图像
EN

Stack Overflow用户
提问于 2015-09-01 08:50:38
回答 1查看 254关注 0票数 0

我在Swift中做了一个简单的自定义视图,它有一个背景图像视图,前面有一张照片和一些标签。然后我将自定义视图添加到我的故事板中,它显示得很好,我可以看到背景图像和标签。

但是当我在我的设备上运行我的应用程序时,图像视图不会立即显示,如果我导航到另一个视图,然后返回,它就会显示出来。我只有一个计时器,在我的场景中在后台安排一些任务。我错过了什么吗?

下面是我的自定义视图的代码

代码语言:javascript
运行
复制
import UIKit

@IBDesignable class GaugeView: UIImageView {

    @IBOutlet weak var speedLabel: UILabel!

    let circlePathLayer = CAShapeLayer()
    var circleRadius: CGFloat = 50.0

    var speed: CGFloat {
        get {
            return circlePathLayer.strokeEnd
        }
        set {
            speedLabel.text = String(format: "%.2f", newValue)

            if newValue < 20.0 {
                circlePathLayer.strokeColor = UIColor.blueColor().CGColor
            } else if newValue >= 25.0 {
                circlePathLayer.strokeColor = UIColor.redColor().CGColor
            } else {
                circlePathLayer.strokeColor = UIColor.yellowColor().CGColor
            }

            if (newValue > 50) {
                circlePathLayer.strokeEnd = 1
            } else if (newValue < 0) {
                circlePathLayer.strokeEnd = 0
            } else {
                circlePathLayer.strokeEnd = newValue / 49.9
            }
        }
    }

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        xibSetup()
    }

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

        xibSetup()
    }

    override func layoutSubviews() {
        super.layoutSubviews()

        circleRadius = bounds.width / 2 - 2.6
        circlePathLayer.frame = bounds
        circlePathLayer.path = circlePath().CGPath
    }

    // Our custom view from the XIB file
    var view: UIView!
    let nibName = "GaugeView"

    func xibSetup() {
        view = loadViewFromNib()
        // use bounds not frame or it'll be offset
        view.frame = bounds
        // Make the view stretch with containing view
        view.autoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight
        // Adding custom subview on top of our view (over any custom drawing > see note below)
        addSubview(view)
        // Configure speed circle layer
        configure()
    }

    func configure() {
        speed = 0.0
        circlePathLayer.frame = bounds
        circlePathLayer.lineWidth = 6
        circlePathLayer.fillColor = UIColor.clearColor().CGColor
        circlePathLayer.strokeColor = UIColor.blueColor().CGColor
        layer.addSublayer(circlePathLayer)
        backgroundColor = UIColor.whiteColor()
    }

    func circleFrame() -> CGRect {
        var circleFrame = CGRect(x: 0, y: 0, width: 2*circleRadius, height: 2*circleRadius)
        circleFrame.origin.x = CGRectGetMidX(circlePathLayer.bounds) - CGRectGetMidX(circleFrame)
        circleFrame.origin.y = CGRectGetMidY(circlePathLayer.bounds) - CGRectGetMidY(circleFrame)
        return circleFrame
    }

    func circlePath() -> UIBezierPath {
        let center: CGPoint = CGPointMake(CGRectGetMidX(circlePathLayer.bounds), CGRectGetMidY(circlePathLayer.bounds))
        let start = CGFloat(1.33 * M_PI_2)
        let end = CGFloat( 1.64 * M_2_PI)
        return UIBezierPath(arcCenter: center, radius: circleRadius, startAngle: start, endAngle: end, clockwise: true)
    }

    func loadViewFromNib() -> UIView {
        let bundle = NSBundle(forClass: self.dynamicType)
        let nib = UINib(nibName: nibName, bundle: bundle)
        let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView

        return view
    }

}

然后,我将自定义视图添加到我的故事板中,并使用performSegueWithIdentifier("dashboardSegue",sender: nil)编程导航到场景。我刚刚注意到,不仅是客户视图,而且场景中的两个进度条也没有显示。

EN

回答 1

Stack Overflow用户

发布于 2015-09-01 09:09:56

最好是显示你的代码,但我猜你的计时器卡住了主UI线程。当您导航到另一个视图时,将调用您的timer.invalidate()。尝试卸下NSTimer以查看它是否工作正常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32321968

复制
相关文章

相似问题

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