0

-init および -viewWillLayoutSubviews メソッドの外側にフレームを設定しないアプリに問題があります。editButton をタップするとどうなるかは、エディター ビューを非表示にするアニメーションです。それにもかかわらず、テストしても何も起こりません。ブロックに含まれていない -setFrame メソッドも機能しないため、問題はアニメーション メソッドに起因するものではありません。

コードは次のとおりです。

-(id)init {

    if (self = [super init]) {

        editButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(editButtonTapped)];
        doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonTapped)];


        editor = [[UIView alloc] init];
        [editor setBackgroundColor:[UIColor yellowColor]];
        editor.clipsToBounds = YES;
        editorIsOpen = YES;        

        portraitRegularModeEditorRect = CGRectMake(15, 59, 738, 100);
        portraitClosedEditorEditorRect = CGRectMake(15, 59, 738, 0);


    }
    return self;

}


- (void)viewDidLoad {

    [super viewDidLoad];

    [[self view] addSubview:editor];
    [[self view] setBackgroundColor:[UIColor blueColor]];

}


-(void)viewDidAppear:(BOOL)animated {

    [self setForRegularMode];

}




-(void)viewWillLayoutSubviews {

    UIInterfaceOrientation io = [[UIApplication sharedApplication] statusBarOrientation];
    if (io == UIInterfaceOrientationPortrait || io == UIInterfaceOrientationPortraitUpsideDown) {

        //portrait
        [editor setFrame:portraitRegularModeEditorRect];


     } else {

        //landscape

     }


}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}


-(void)editButtonTapped {

    [self setForScenarioLinesEditingMode];

}

-(void)doneButtonTapped {

    [self setForRegularMode];

}


-(void)setForRegularMode {

    editingMode = CPRegularMode;    

    if (!editorIsOpen) {

        [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationCurveEaseOut animations:^(void){

            [editor setFrame:portraitRegularModeEditorRect];

        } completion:^(BOOL finished) {

            editorIsOpen = YES;

        }];

    }


    [[self navigationItem] setRightBarButtonItems:[[NSArray alloc] initWithObjects:editButton,nil]];

}



-(void)setForScenarioLinesEditingMode {

    editingMode = CPScenarioLinesEditingMode;

    if (editorIsOpen) {

        [UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationCurveEaseOut animations:^(void){

            [editor setFrame:portraitClosedEditorEditorRect];

        } completion:^(BOOL finished) {

            editorIsOpen = NO;

        }];

    }

    [[self navigationItem] setRightBarButtonItems:[[NSArray alloc] initWithObjects:doneButton,nil]];


}

誰かが助けてくれるなら、事前に感謝します;)

4

2 に答える 2

1

View Controller はストーリーボードに設定されていますか? Autolayout を使用していますか (デフォルトでオンになっていますか?)。

または、ここに示すように、ストーリーボードで Autolayout をオフにすることもできます。

于 2013-04-25T17:04:55.720 に答える