在Swift

时间:2017-03-31 14:59:23

标签: swift class swift3 in-class-initialization

因此,我尝试创建一个充当“演示文稿”的游乐场,这意味着我有多张幻灯片,而且它是互动式的。我是Swift的新手,所以真的会使用一些帮助。

这是我的主要代码

import UIKit
import SpriteKit
import PlaygroundSupport

let frame = CGRect(x: 0, y: 0, width: 640, height: 480)

let view = SKView(frame: frame)
view.showsDrawCount = true
view.showsNodeCount = true
view.showsFPS = true

let scene = MainScene(size: CGSize(width: 640, height: 480))
view.presentScene(scene) //error here, explained below
PlaygroundPage.current.liveView = view

这是我的MainScene.swift代码 -

import UIKit
import SpriteKit
import PlaygroundSupport

public class Slide: SKView {

    public var title: SKLabelNode!
    public var info: UITextView!

    public func setter() {

        self.title = SKLabelNode(fontNamed: "Chalkduster")
        self.title.verticalAlignmentMode = .center
        self.title.color = SKColor.white
        self.title.position = CGPoint(x: frame.midX, y: 440)

        let framer = CGRect(x: 40, y: 60, width: 560, height: 360)

        self.info = UITextView(frame: framer)
        self.info.font = UIFont(name: "Chalkduster", size: 20)
        self.info.textAlignment = .center
        self.info.textColor = UIColor.white
        self.info.backgroundColor = UIColor.black
    }


}

public class MainScene: SKScene {

    public var button1 = SKSpriteNode(imageNamed: "Next")
    public var button2 = SKSpriteNode(imageNamed: "Previous")

    public var scene1: Slide?

    public override func didMove(to view: SKView) {

        backgroundColor = SKColor.black
        scene1?.setter()
        setScene1()
    }

    public func setScene1() {

        scene1?.title = SKLabelNode(fontNamed: "Chalkduster")
        scene1?.title.text = "Title."
        scene1?.title.position = CGPoint(x: frame.midX, y: frame.midY)
        scene1?.info.text = "Text."

        addChild(scene1?.title)
        addButtons()
    }

    public func addButtons() {

        self.button1.position = CGPoint(x: 600, y: 40)
        self.button2.position = CGPoint(x: 40, y: 40)
        addChild(self.button1)
        addChild(self.button2)
    }

}

基本上,我想通过可以改变上一张幻灯片标题/信息的功能来设置多张幻灯片。但是,我认为为我的幻灯片定义SKView类以便使用SKTransition会好得多。

但是,使用我当前的代码,我遇到了执行中断错误。此外,当我更改周围的东西时,错误类型跟随我进入预期声明或没有MainScene.swift的类初始化器。

真的,我只想修改我的类Slide的声明,然后使用该类制作多张幻灯片。

1 个答案:

答案 0 :(得分:1)

这是一个没有SpriteKit的例子。您应该仔细阅读一些基本的Swift和UIKit课程,以便在语言上获得良好的基础

import UIKit
import PlaygroundSupport

public class Slide: UIView {

    public var title: UILabel
    public var info: UITextView

    required public override init(frame:CGRect) {
        self.title = UILabel()
        self.title.font = UIFont(name: "Chalkduster", size: 20)
        self.title.textColor = UIColor.white
        self.title.backgroundColor = UIColor.red
        self.title.center = CGPoint(x: frame.midX, y: 440)

        self.info = UITextView()
        self.info.font = UIFont(name: "Chalkduster", size: 20)
        self.info.textAlignment = .center
        self.info.textColor = UIColor.white
        self.info.backgroundColor = UIColor.blue

        super.init(frame: frame)
        addSubview(title)
        addSubview(info)

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

public class MainScene: UIView {
    public var scene1: Slide

    required public override init(frame: CGRect) {
        scene1 = Slide()
        super.init(frame: frame)
        scene1.title.text = "Title."
        scene1.title.sizeToFit()
        scene1.title.center = CGPoint(x: frame.midX, y: frame.midY - 20)
        scene1.info.text = "Text."
        scene1.info.sizeToFit()
        scene1.info.center = CGPoint(x: frame.midX, y: frame.midY + scene1.title.frame.height + 20)
        addSubview(scene1)
    }
    required public init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

let frame = CGRect(x: 0, y: 0, width: 640, height: 480)

let view = UIView(frame: frame)

let scene = MainScene(frame: frame)
view.addSubview(scene)
PlaygroundPage.current.liveView = view