0
我很想念這裏的東西。我得到Liveness在Interface Builder中工作。我可以用NSImage.draw直接在NSView中繪製圖像。所以圖像加載正確。但是,當我將它放入CALayer中時,它不會顯示出來。 我錯過了關於NSView行爲的一些信息嗎? CALayer的?層託管?或者是其他東西?在CALayer和生活中的NSImage
這裏的視圖的代碼:
import Foundation
import AppKit
import QuartzCore
@IBDesignable public class CircularImageView: NSView {
var imageLayer: CALayer?
@IBInspectable public var edgeInset: CGFloat = 10
public var image: NSImage? {
didSet {
if let newImage = image {
imageLayer?.contents = newImage
}
}
}
// MARK: New in this class
private func prepareLayer() {
self.layer = CALayer()
self.wantsLayer = true
}
private func drawImage() {
// What am I doing wrong here?
var newImageLayer = CALayer()
newImageLayer.contentsGravity = kCAGravityResizeAspect
if let imageToSet = image {
newImageLayer.contents = imageToSet
}
let insetBounds = CGRectInset(self.bounds, edgeInset, edgeInset)
newImageLayer.frame = insetBounds
newImageLayer.backgroundColor = NSColor(calibratedWhite: 0.8, alpha: 1).CGColor
self.layer!.addSublayer(newImageLayer)
imageLayer = newImageLayer
}
private func test(){
image?.drawInRect(self.bounds)
}
// MARK: NSView stuff
public override init(frame frameRect: NSRect) {
super.init(frame: frameRect)
prepareLayer()
}
public required init?(coder: NSCoder) {
super.init(coder: coder)
prepareLayer()
}
public override func viewWillDraw() {
super.viewWillDraw()
drawImage()
}
public override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
// Load default test image.
println("\(self): prepareForInterfaceBuilder")
let processInfo = NSProcessInfo.processInfo()
let environment = processInfo.environment
let projectSourceDirectories : AnyObject = environment["IB_PROJECT_SOURCE_DIRECTORIES"]!
let directories = projectSourceDirectories.componentsSeparatedByString(":")
if directories.count != 0 {
let firstPath = directories[0] as! String
let imagePath = firstPath.stringByAppendingPathComponent("CircularView/Bz1dSvR.jpg")
let image = NSImage(contentsOfFile: imagePath)
image!.setName("Test Image")
self.image = image
}
}
}
在此先感謝。
你可以解釋一下這行:'let myLayer = CALayer()'?您正在創建一個CALayer,然後立即將其扔掉。 – matt
這應該是self.layer = CALayer()謝謝,但仍然沒有工作。 –
好的,但編輯來修復問題中的代碼。不要顯示不好的代碼,並期望人們閱讀你的想法。 – matt