我正在开发一个应用程序,该应用程序具有允许用户从他们的照片库中选择图像并为其附加标题的功能,以便在 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