IOS 7:添加具有透明度的模态ViewController:自定义大小

时间:2014-05-05 11:38:48

标签: ios uiviewcontroller

我想要做的是提供一个来自底部并具有自定义大小的viewController。无论我做什么,或者看起来都是naff(例如它的动画,闪烁然后变得透明),全屏或黑屏整个屏幕。我已经阅读了一些自定义代表处理动画的解决方案,但必须有一个简单的方法。此外,许多解决方案适用于iOS 6<

    HackViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"HackViewController"];
   vc.delegate = self;
   vc.modalPresentationStyle= UIModalPresentationCustom;
   vc.view.frame = CGRectMake(0, 0, 800, 400);
   vc.credits = CREDIT_PER_LEVEL * building.buildingLevels;
   vc.view.backgroundColor = [UIColor clearColor];

   [self presentViewController:vc animated:YES completion:^{
             vc.view.backgroundColor = [UIColor clearColor];
   }];

3 个答案:

答案 0 :(得分:1)

如果您只想支持iOS7及更高版本,可以使用自定义模式演示样式(UIModalPresentationCustom)实现此功能,并实现transitioningDelegate以返回转换控制器。在转换控制器中,将在演示发生时调用,并且您可以提供所呈现的视图控制器的目标帧。这具有使用系统表示模型的巨大优势,并且系统知道已经呈现了控制器。

如果您需要支持iOS6,则需要将呈现的视图控制器添加为子视图,将视图控制器添加为呈现视图控制器的子视图控制器,并自行管理视图层次结构。由于手动视图层次结构控制和子/父视图控制器,这不是最佳的。

答案 1 :(得分:1)

如果你想将viewController(比如VC2)作为模态添加到第一个viewController(比如VC1),那么在 VC1 中,当你呈现 VC2 时,

[self presentViewController:VC2 animated:YES completion:nil];

VC2 viewDidLoad

[self.view setBackgroundColor:[UIColor colorWithRed:211.0/255.0 green:211.0/255.0 blue:211.0/255.0 alpha:0.8]];

并且AppDelegate下的application didFinishLaunchingWithOptions:

[[self.window rootViewController] setModalPresentationStyle:UIModalPresentationCurrentContext];

您可以在 VC2

中创建其他视图,例如imageViewlabel

答案 2 :(得分:0)

你不必presentViewController:,你可以用addSubview:做到这一点 继续执行您正在执行的操作但添加vc视图以查看显示的视图控制器,而不是使用vc

呈现presentViewController:

如果你在动画块中这样做,它看起来会很好。