CALayerのコンテンツとして画像を表示しようとしましたが、その境界をより大きなサイズに変更して少し拡大しました。 (これはあとでわかります) 何らかの理由で境界を設定しても、境界が変更されたりアニメーションがトリガーされたりすることはありません。CALayerの境界が一定の値に設定された後で変更されない
これは私が範囲を変更するために使用するコードです:
self.imageLayer.bounds = CGRect(x: 0, y: 0, width: 10, height: 10)
私はCGRectを計算する機能を持っていますが、このダミー1は変わらない大きさのまったく同じ結果につながります。
私はサイズの変更が見えませんが、設定した直後にレイヤーの境界をチェックすると正しく設定されていることがわかりました。
次のコードは、境界を設定した後に実行されます。私はそれで何かを見つけることができなかった。
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メソッド内。私はそのコンテンツとして与えられたイメージを取得する新鮮なレイヤーを作成します。私は層の境界を拡大しない値に変更します(他の場合に必要です)。その後、古いレイヤーを置き換えることでレイヤーをサブレイヤーとして追加します。次に、上記のように範囲を変更します。 しかし、レイヤーが視覚的に示す境界は、最初に設定したものです。 –