0

我找不到为什么我的子视图的背景在我第一次移动它或为其设置动画时会向子视图的左上角缩小。(不确定它在技术上是否是“子视图”,因为我拖到主视图上的对象被标记为“视图”)

对于此示例,我将提供一个动画示例,以便您可以更轻松地了解发生了什么。

这是我的 .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 点空间。如果你把一个对象放在视图中,它不会移动,这告诉我视图没有缩小,只有背景。在第一次“切换”之后,按钮按预期运行。我添加了背景更改颜色代码,以表明第一个切换从不调用动画代码,这从背景在第二个切换之前不会改变颜色这一事实就可以看出。

4

1 回答 1

0

我不知道这种情况多久发生一次,但我可以在盯着这个问题几个星期后回答我自己的问题。如果你看我描述添加视图的顶部,我给它尺寸(728、186)。但是我自己的动画代码将框缩小到 (584, 145)。

至于为什么第一次点击切换按钮不会改变背景,那是因为我相信我正在使用语法将'floatPadVisible'标志设置为YES:

floatPadVisible:YES;

实际上它不是第一次通过该方法时,它会运行不可见的代码。

于 2013-03-26T02:08:14.543 回答