UIView动画问题与autolayout和约束

时间:2013-10-23 08:06:49

标签: ios objective-c uiview uiviewanimation nslayoutconstraint

我正在开发一款应用程序,该应用程序具有允许用户从其照片库中选择图像并附加标题的功能,以便在UICollectionView中显示。我正在使用故事板和自动布局。我有一个UIView(嵌入在导航控制器中),它包含一个基本文本字段供用户输入其标题,一个初始化图像选择器控制器的按钮,以及一个小UIView子视图,其中包含所选图像的缩略图和用户决定更改其选择时的小“X”按钮。

当用户做出选择时,我想要一个动画来隐藏“选择图像”按钮并移动保持图像缩略图的UIView进入它的位置。如果他们然后按下缩略图一角的“X”按钮,则UIView将向下移动,“选择图像”按钮将重新出现。

我的问题是,当用户取消选择时,我可以让动画工作,但是当他们制作选择并从图像选择器控制器返回时;视图根本没有移动,但是为了测试动画代码,我将“选择图像”按钮的alpha设置为0.0,这样就可以正常动画!?

以下是一些代码:

// MyController.m

// When user hits the 'select image' button
- (void)selectImage
{   
    self.imagePicker = [[UIImagePickerController alloc] init];
    self.imagePicker.delegate = self;
    [self.imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
    [self presentViewController:self.imagePicker animated:YES completion:nil];
}

// When user has selected an image from photo library
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    // Grab photo selection..

    [self dismissViewControllerAnimated:YES completion:nil];    
    [self imageSelectionMade];
}

// Animation to hide button and move thumbnail up
- (void)imageSelectionMade
{
    CGRect rect = self.thumbView.frame;

    [UIView animateWithDuration:0.3 delay:1.0 options:UIViewAnimationOptionCurveLinear animations:^{
        self.buttonView.alpha = 0;
        self.thumbView.frame = CGRectMake(rect.origin.x, (rect.origin.y - 76), rect.size.width, rect.size.height);
    }completion:nil];
    // Show 'X' button on corner of image
}

// Animation to move thumbnail down and display button again
- (void)imageSelectionCancelled
{
    CGRect rect = self.thumbView.frame;
    [UIView animateWithDuration:0.3 animations:^{
        self.buttonView.alpha = 1.0;
        self.thumbView.frame = CGRectMake(rect.origin.x, (rect.origin.y + 76), rect.size.width, rect.size.height);
    }];
    // Change image to 'placeholder' and hide 'X' button..
}

我在这里已经阅读了很多关于类似问题的不同帖子,但似乎都没有解决问题。我试过操纵视图的约束而不是视图的框架,这只会导致它在两个实例中“捕捉”到位。我试过[self.view layoutIfNeeded]没有效果。我已经尝试将第一个动画的代码放在之前出现的图像选择器有效,但显然会被进入视图的选择器覆盖。我不敢说我​​不知道​​还有什么可以尝试不能禁用自动布局(鉴于我有限的经验以及我不知道它将如何影响其余部分的表情,我并不过分自信。应用程序)

有谁知道造成这种情况的原因是什么?我只能猜测它与子视图的约束有关,但为什么它在我的imageSelectionCancelled方法中有用?

注意:我正在使用Xcode 4.6

0 个答案:

没有答案