2

私は CALayer ("layerPlot_") を含む UIView を持っています。次のメソッドを呼び出すと動作しますが、高さを両方向 (上下) に拡張します。レイヤーのもう一方の端は同じ位置に維持されます。

コードは次のとおりです。

/**
 * Resizes the layer to a new height.
 *
 * @param newHeight the new height of the layer
 */
-(void)resizeLayerTo:(CGFloat)newHeight {

// Create animation
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"bounds.size.height"];

[animation setFromValue:[NSNumber numberWithFloat:0.0f]];
[animation setToValue:[NSNumber numberWithFloat:newHeight]];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
[animation setFillMode:kCAFillModeForwards];
[animation setDuration:1.2f];

// Update the layer's bounds so the layer doesn't snap back when the animation completes.
CGRect newSize = [layerPlot_ bounds];
newSize.size.height = newHeight;
layerPlot_.bounds = newSize;

// Add the animation, overriding the implicit animation.
[layerPlot_ addAnimation:animation forKey:@"bounds"];
}

ありがとう。

4

1 に答える 1

1

自分で計算を行い、境界の代わりにフレームをアニメーション化するか、レイヤーのアンカーポイントを下に変更してから境界を更新することができます。

そのポイントに関連するすべてのコンテンツを描画するため、位置を更新する必要があることに注意してください。そうしないと、幅の半分だけ上にシフトしたように見えます。

于 2012-08-30T10:20:14.153 に答える