2013-03-23 52 views
0

我无法找到为什么我第一次移动子视图或为其设置动画时,子视图的背景缩小到子视图的左上角。 (不知道它是否在技术上属于'子视图',因为我拖到我的主视图上的对象被标记为'视图')当视图处理或动画时,视图背景缩小

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

这里是我的.h条目(2个目的,一个按钮和一个视图)

@property (weak, nonatomic) IBOutlet UIView *floatPad; 
- (IBAction)toggleButton:(UIButton *)sender; 

对于此示例总览视图位于(20,800)的尺寸的(728, 186)。我还在界面生成器中将背景设置为浅灰色以显示更好的结果。

该按钮在屏幕上和屏幕之间切换视图,通过屏幕底部滑动(通过动画代码)。

这里是我的.m项(1 BOOL,1的UIColor,加上“viewDidLoad中”和“切换按钮”的代码)

@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点空间。如果你在视图内部放置一个对象,它不会移动,这告诉我视图不缩小,只有背景。在第一个“切换”按钮后按钮按预期运行。我添加了背景更改颜色代码,以显示第一个切换从不调用动画代码,显然背景在第二个切换之前不会更改颜色。

+0

你知道,有一天我要编写一种与Xcode完全不兼容的语言,叫做Xcode,只是为了让人们失望。在此之前,将[Xcode]标签限制为与IDE相关的问题,而不是与语言相关的问题。 – CodaFi 2013-03-23 16:10:21

+0

我现在明白了。它确实感到多余。所以xcode标签只针对有关应用程序本身的问题或疑问。 – tcison 2013-03-23 18:55:12

回答

0

我不知道发生这种事情的频率如何,但是我可以在看到这个问题数周后回答我自己的问题。如果你看一下我描述添加视图的顶部,我给它的尺寸(728,186)。但是我自己的动画代码缩小了盒子(584,145)。

至于为什么第一次打的切换按钮没有改变的背景下,这是因为我相信我的“floatPadVisible”标志和语法设置为YES:

floatPadVisible:YES; 

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