1

オブジェクトに 2 つの UIImageView があり、本のようにページにアニメーション化しようとしています。組み込みのアニメーションのいくつかをしばらく使用して ( UIViewAnimationTransitionFlipFromLeft/Right)、もっとうまくやれると判断しました。ここで、必要なアニメーションの半分の良い例を見つけました: http://fiftysixtysoftware.com/blog/2009/uiview-pageopen-sample-project/

そこから外挿してアニメーションを機能させることができました...しかし、私が抱えている問題は、アニメーション画像 (右の画像) が常に左の画像のに表示されることです。

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

// set up some rects for use later
landscapeLeftRect = CGRectMake(0, 12, 512, 725);
landscapeRightRect = CGRectMake(512, 12, 512, 725);

// all our images
imageLeft = [[UIImageView alloc] initWithFrame:portraitRect];
imageRight = [[UIImageView alloc] initWithFrame:landscapeRightRect];

...そして実際のアニメーションを実行します (これはアニメーションの後半であり、私の imageLeft ビューと「重なる」半分であることに注意してください):

// set the image to be nextLeft
//[imageRight setImage:image.nextLeft];
[self.view sendSubviewToBack:imageLeft];
[self.view bringSubviewToFront:imageRight];
//[imageRight.layer setZPosition:1.0f];
[imageRight setFrame:landscapeLeftRect];

// remove any previous animations
[imageRight.layer removeAllAnimations];

// set up the anchorPoint and center
if (imageRight.layer.anchorPoint.x != 1.0f) {
    imageRight.layer.anchorPoint = CGPointMake(1.0f, 0.5f);
    imageRight.center = CGPointMake(imageRight.center.x + imageRight.bounds.size.width/2.0f, imageRight.center.y);
}

// create an animation to hold the first half of the page turning forward
CABasicAnimation *transformAnimation = [CABasicAnimation animationWithKeyPath:@"transform"];
transformAnimation.removedOnCompletion = YES;
transformAnimation.duration = 0.40f;
transformAnimation.delegate = self;
transformAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
// start the animation from the current state
CATransform3D endTransform = CATransform3DMakeRotation(3.141f/2.0f,
                                                       0.0f,
                                                       -1.0f,
                                                       0.0f);
// these values control the 3D projection outlook
endTransform.m34 = -0.001f;
endTransform.m14 = 0.0015f;
transformAnimation.fromValue = [NSValue valueWithCATransform3D:endTransform];
// we should end up at the beginning...
transformAnimation.toValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];

[imageRight.layer addAnimation:transformAnimation forKey:nil];

私が試したこと:(上記のコードで両方を見ることができます)

  • BringSubviewToFront/sendSubviewToBack
  • レイヤーに Z インデックスを設定する

アドバイスや知恵をよろしくお願いします。繰り返しますが、問題は私の imageLeft が常にアニメーションの上に表示されることです。

4

4 に答える 4

3

私は同じ問題に直面し、ビューの zPosition を設定することで修正できることがわかりました。私はこのようなものを使用しました:

viewThatShouldBeSentToTheBack.layer.zPosition=-10000;

于 2010-11-21T07:50:18.530 に答える
0

私はこの正確な問題に遭遇し、それを回避する唯一の方法は、背景の zPosition を大きな負の数に設定することであることがわかりました。その理由を正確に知ることができれば幸いです…</p>

于 2011-04-28T22:54:38.590 に答える
0

ページビューをスーパービューに追加するときに、配列を正しく反復処理していますか? 当然のことながら、最初のページが一番上になるように、最後のページを最初に置きたいと思うでしょう... 私はあなたの知性を侮辱しているわけではありません - レイヤーは扱いにくい場合があります。

于 2010-04-22T20:13:57.873 に答える
0

アニメーション ビューを前面に表示すると、すべてが機能することがわかりました。私はページめくりのアニメーションに取り組んでいますが、反時計回りにページ オーバーレイを表示して逆方向にページングするときに問題がありました。私の問題は、アニメーションがオーバーレイされるはずだったページの後ろにあったため、アニメーションを見ることができなかったことです.

于 2010-04-20T17:01:54.840 に答える