1

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
}

どこかでビューのサイズが変更されていることに注意してください。これがどこで/なぜ/どのように起こっているのか、頭に浮かびません。他に見るべきアイデアはありますか?

4

1 に答える 1

0

ビューのサイズが変更されたときを見つけるために、uiview をサブクラス化し、次をオーバーライドできます

- (void)setFrame:(CGRect)frame
{
    [super setFrame:frame];
}

ビューのサイズが変更されるたびに、この関数が呼び出されるようになりました

于 2012-05-31T10:01:38.037 に答える