繁体   English   中英

iOS Swift中的CALayer或UIView?

[英]CALayer or UIView in iOS Swift?

谁能给我指出一个教程或示例代码(或两者兼而有之),它们说明了为iOS添加视图和图层的正确方法。

理想情况下是Swift,而不是ObjC。

我有可以单独添加SKNode的代码,没问题,但是如果我添加一个渐变层-我希望背景为天空,则Gradient可以覆盖其他所有内容。

我尝试了各种形式的在上面的索引处添加子层的方法,等等,但是似乎没有任何效果。 我认为这是我对CALayer和UIView的基本理解。 我找不到一个好的教程:(

任何帮助表示赞赏。 为亚当欢呼。

这是一个样本。
该视图充满了渐变,这很好,但是尽管试图将其强制在背景层上方,但该按钮似乎隐藏在其下方。

import QuartzCore
class NightScene: SKScene, SKPhysicsContactDelegate {

let playButton = SKSpriteNode(imageNamed: "play")


let gradient = CAGradientLayer()
    gradient.frame = view.bounds
    let colorTop = UIColor(red: 0.0, green: 0.0, blue: 0.100, alpha: 1.0).CGColor
    let colorMid = UIColor(red: 0.0, green: 0.0, blue: 0.450, alpha: 1.0).CGColor
    let colorBottom = UIColor(red: 0.0, green: 0.0, blue: 0.260, alpha: 1.0).CGColor
    let arrayColors: Array <AnyObject> = [colorTop, colorMid, colorBottom]
    gradient.colors = arrayColors
    gradient.locations = [ 0.0, 0.4, 1.0]
    self.view.layer.insertSublayer(gradient, atIndex:0)


    let sceneLayer = CALayer()
    sceneLayer.frame = view.bounds
    self.view.layer.insertSublayer(sceneLayer, above: gradient)

    self.playButton.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidX(self.frame)*2.5)
    self.addChild(playButton)

}

我发现这里的教程非常有帮助: http : //www.raywenderlich.com/75270/make-game-like-candy-crush-with-swift-tutorial-part-1

它包含图层,位于Swift中。 我还遵循了《生活游戏》教程,该教程使用节点的zPosition来帮助进行分层,尽管它们没有被称为layers,并且没有像您的渐变那样进行设置:

https://www.makegameswith.us/gamernews/399/create-the-game-of-life-using-swift-and-spritekit

我发现,即使删除渐变,也无法在其位置查看按钮,但是我们可能只是在使用其他尺寸的设备。 您的sceneLayer是否为空? 我不了解您的sceneLayer和playButton之间的关系。

即使这个问题已有一年多的历史,但经过无数小时的自我搜索,我仍将提供一个答案。 我发现许多类似的问题,但没有/含糊其词。

我发现,节点不像渐变那样支持图层。 这导致渐变占据了整个UI视图。 即使设置了zLocation,节点也不可见。 这是针对基于SpriteKit的项目。

我偶然发现了一个可用于创建渐变背景的库。 该库基本上将渐变转换为SKSpriteNode。 Gradient -> Texture -> Node

https://www.github.com/braindrizzlestudio/BDGradientNode

来自开发商

我们之所以编写BDGradientNode,是因为在SpriteKit中动态设置渐变有些麻烦。 UIView具有CALayer支持,并且可以访问CAGradientLayer,这使它们的制作非常简单(非常简单)。 (尽管无法完成扫描渐变。)SKNode不受层支持。 尽管您可以从可以分配给SKSpriteNode的图层中跳过一些步骤来制作图像和纹理(这是我们在SpriteKit中仅需要简单渐变时首先要做的),但它既麻烦又不灵活。

简单的线性背景

将库添加到您的Xcode项目后,您可以使用以下内容创建线性渐变背景:

    let color1 = UIColor(red: 0/255, green: 118/255, blue: 162/255, alpha: 1.0)
    let color2 = UIColor(red: 0/255, green: 85/255, blue: 116/255, alpha: 1.0)
    let colors = [color1, color2]

    let blending : Float = 1.0

    let startPoint = CGPoint(x: 0.5, y: 1.0)
    let endPoint = CGPoint(x: 0.5, y: 0.0)

    let nodeSize = CGSize(width: self.frame.width, height: self.size.height)

    let texture = SKTexture(imageNamed: "dummypixel")

    let myGradientNode = BDGradientNode(linearGradientWithTexture: texture, colors: colors, locations: nil, startPoint: startPoint, endPoint: endPoint, blending: blending, keepTextureShape: false, size: nodeSize)

    myGradientNode.zPosition = 0
    myGradientNode.position = CGPointMake(self.size.width/2, self.size.height/2)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM