初めてサブビューを移動またはアニメートしたときに、サブビューの背景がサブビューの左上隅に向かって縮小する理由がわかりません。(メインビューにドラッグしたオブジェクトには「ビュー」というラベルが付いているため、技術的には「サブビュー」かどうかはわかりません)
この例では、何が起こっているのかを簡単に確認できるように、アニメーションの例を提供します。
これが私の.hエントリです(2つのオブジェクト、ボタンとビュー)
@property (weak, nonatomic) IBOutlet UIView *floatPad;
- (IBAction)toggleButton:(UIButton *)sender;
この例(iPad)の場合、ビューは(20、800)にあり、サイズは(728、186)です。また、Interface Builderで背景を明るい灰色に設定して、何がうまくいっているのかを示します。
ボタンは、画面のオンとオフを切り替え、画面の下部をスライドして(アニメーションコードを介して)オンとオフを切り替えます。
これが私の.mエントリです(1つのBOOL、1つのUIColor、および「viewDidLoad」と「toggleButton」コード)
@interface ViewController ()
@property (assign, nonatomic) BOOL floatPadVisible;
@property (retain, nonatomic) UIColor* redBackground;
@end
@implementation ViewController
@synthesize floatPad;
@synthesize floatPadVisible;
@synthesize redBackground;
- (void)viewDidLoad {
floatPadVisible:YES;
redBackground = [UIColor colorWithRed:179/255.0 green:1/255.0 blue:54/255.0 alpha:1.0];
[super viewDidLoad];
}
- (IBAction)toggleButton:(UIButton *)sender {
if (floatPadVisible) { //is floatPadVisible BOOL set to YES
[UIView beginAnimations:@"floatPad" context:nil];
[UIView setAnimationDuration:1.5];
[UIView setAnimationDelegate:self];
[floatPad setFrame:CGRectMake(20, 1004, 584, 145)];
[floatPad setBackgroundColor:redBackground];
[UIView commitAnimations];
floatPadVisible = NO;
}
else {
[UIView beginAnimations:@"floatPad" context:nil];
[UIView setAnimationDuration:1.5];
[UIView setAnimationDelegate:self];
[floatPad setFrame:CGRectMake(20, 800, 584, 145)];
[UIView commitAnimations];
floatPadVisible = YES;
}
}
問題は、最初にトグルボタンを押したときに、ビューが移動せず、背景のみが縮小することです。ビューの左側にある20ポイントのスペースを引き続き使用できるため、縮小すると言います。ビュー内にオブジェクトを配置すると、オブジェクトは移動しません。これは、ビューが縮小されておらず、背景のみが縮小されていることを示しています。最初の「トグル」の後、ボタンは期待どおりに動作します。背景変更のカラーコードを追加して、最初のトグルがアニメーションコードを呼び出さないことを示しました。これは、2番目のトグルまで背景の色が変更されないことからも明らかです。