UIViewController の一部としてビュー (実際には UIControl) があります。このビューは IB で設計されており、ユーザーのアクションに基づいてコードでビューのフレームを変更しています。すべてが CATransition 内で行われます。コードは次のようになります。
CATransition *anim = [CATransition animation];
anim.type = kCATransitionFade;
anim.duration = 0.5;
anim.delegate = self;
anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
[mainPanel.layer addAnimation:anim forKey:@"changeTextTransition"];
float totalHeight = ...; // this is the Y of the frame
float max_width = ...; // this is the width of the frame
float bh = ...; // this is the height of the frame
... //some computations to determine the frame for my view
[blockView setFrame:CGRectMake(0, totalHeight, max_width, bh)];
//This is for debugging
CGSize sg = answer1.frame.size;
NSLog(@"width: %f, height: %f", sg.width, sg.height);
//This outputs: width: 260.000000, height: 29.000000
これまでのところ、すべて問題なく、NSLog に幅と高さの正しい値が表示されます。しかし、ビューが表示されると、その寸法が変更されています。次に、同じデバッグをanimationDidStop
- に追加すると、異なる結果が表示されます。
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
[scroll flashScrollIndicators];
CGSize sg = answer1.frame.size;
NSLog(@"width: %f, height: %f", sg.width, sg.height);
//This outputs: width: 280.000000, height: 49.000000
}
どこかでビューのサイズが変更されていることに注意してください。これがどこで/なぜ/どのように起こっているのか、頭に浮かびません。他に見るべきアイデアはありますか?