我試圖通過將CALayer的內容更改爲更大的大小來稍微放大顯示圖像。 (這是爲了讓我可以稍後平移它。) 由於某些原因,但是設置邊界並不會改變它們或觸發動畫來執行此操作。CALayer邊界在設置爲特定值後不會更改
這是我用它來改變邊界的代碼:我有一個函數來計算的CGRect
self.imageLayer.bounds = CGRect(x: 0, y: 0, width: 10, height: 10)
,但這種虛擬一個可以連接到我們的大小相同的結果不改變。
我也確定,雖然我看不到尺寸變化,但如果在設置後檢查圖層的邊界,它會正確地設置它的值。
設置界限後執行以下代碼。我找不到任何東西,改變了他們。
self.imageLayer.add(self.generatePanAnimation(), forKey: "pan")
func generatePanAnimation() -> CAAnimation {
var positionA = CGPoint(x: (self.bounds.width/2), y: self.bounds.height/2)
var positionB = CGPoint(x: (self.bounds.width/2), y: self.bounds.height/2)
positionA = self.generateZoomedPosition()
positionB = self.generateZoomedPosition()
let panAnimation = CABasicAnimation(keyPath: "position")
if self.direction == .AtoB {
panAnimation.fromValue = positionA
panAnimation.toValue = positionB
} else {
panAnimation.fromValue = positionB
panAnimation.toValue = positionA
}
panAnimation.duration = self.panAndZoomDuration
self.panAnimation = panAnimation
return panAnimation
}
func generateZoomedPosition() -> CGPoint {
let maxRight = self.zoomedImageLayerBounds.width/2
let maxLeft = self.bounds.width - (self.zoomedImageLayerBounds.height/2)
let maxUp = self.zoomedImageLayerBounds.height/2
let maxDown = self.bounds.height - (self.zoomedImageLayerBounds.height/2)
let horizontalFactor = CGFloat(arc4random())/CGFloat(UINT32_MAX)
let verticalFactor = CGFloat(arc4random())/CGFloat(UINT32_MAX)
let randomX = maxLeft + horizontalFactor * (maxRight - maxLeft)
let randomY = maxDown + verticalFactor * (maxUp - maxDown)
return CGPoint(x: randomX, y: randomY)
}
我甚至嘗試設置界限如下所示,但它沒有幫助。
CATransaction.begin()
CATransaction.setValue(true, forKey: kCATransactionDisableActions)
self.imageLayer.bounds = CGRect(x: 0, y: 0, width: 10, height: 10)
CATransaction.commit()
我真的很希望有人有一個想法。非常感謝!
你什麼時候這樣做? – matt
另外:「我試圖通過將CALayer的內容更改爲更大尺寸來稍微放大顯示圖像。」改變層的邊界不是如何做到這一點。請更詳細地解釋你到底想做什麼。謝謝。 – matt
在NSImage類型的變量的didSet方法中。我創建了一個新的圖層,它將獲取給定的圖像作爲其內容。然後,我會將圖層邊界更改爲未放大的值(其他情況下需要)。在此之後,我通過用它替換一箇舊圖層來將該圖層添加爲子圖層。然後我改變上面給出的界限。 但是,圖層的邊界視覺顯示是我第一次設置的。 –