相关疑难解决方法(0)

在半尺寸父控制器中呈现模态视图控制器

我试图在其他viewController上呈现模态视图控制器大小到半父视图控制器.但它始终以全屏视图显示.

我在我的故事板中创建了具有固定帧大小的自由形式大小的View控制器.320 X 250.

var storyboard = UIStoryboard(name: "Main", bundle: nil)
var pvc = storyboard.instantiateViewControllerWithIdentifier("CustomTableViewController") as ProductsTableViewController
self.presentViewController(pvc, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)

我试图设置frame.superview,它没有帮助.

图片示例

请指教.

uiviewcontroller presentmodalviewcontroller ios swift

30
推荐指数
5
解决办法
4万
查看次数

在presetentation演示之前失去对transitioningDelegate的引用

我在Xcode beta 2和iOS 10 beta 2之前有一个工作的自定义UIPresentationController.我没有更改任何代码,但现在正在呈现标准模式演示文稿.

UIPresentationController的Apple示例代码中有一条说明:

对于将使用自定义演示控制器的演示文稿,该演示控制器也可以是transitioningDelegate.这避免了在源视图控制器中引入另一个对象或实现.

transitioningDelegate没有对其目标对象的强引用.为了防止在调用-presentViewController之前释放presentationController:animated:completion:NS_VALID_UNTIL_END_OF_SCOPE属性被附加到声明中.

我在演示之前和之后检查了呈现的视图控制器上的transitioningDelegate.在它是我的自定义UIPresentationController之前,但它之后是零.我的猜测是该引用正在发布,但我在Swift中找不到与NS_VALID_UNTIL_END_OF_SCOPE等效的内容.编辑:我已经验证过transitioningDelegate是在演示之前设置的,然后是时候呈现的nil.

我在呈现视图控制器中的代码:

@IBAction func buttonAction(_ sender: UIButton) {
    let secondViewController = storyboard!.instantiateViewController(withIdentifier: "NewViewController") as! NewViewController
    let presentationController = MyPresentationController(presentedViewController: secondViewController, presenting: self)
    presentationController.initialFrame = button.frame
    secondViewController.transitioningDelegate = presentationController

    // Move map
    let pixelsToMove: CGFloat = mapView.frame.height / 4
    let region = self.mapView.region

    self.mapView.setRegion(region, offsetBy: pixelsToMove, animated: true)

    // Delegate to NewViewController
    secondViewController.mapView = mapView
    mapView.delegate = secondViewController

    print(secondViewController.transitioningDelegate)
    UIView.animate(withDuration: 0.3, animations: {
        let tabBar = self.tabBarController!.tabBar
        tabBar.frame.origin.y += tabBar.frame.height …
Run Code Online (Sandbox Code Playgroud)

uiviewcontroller ios swift uipresentationcontroller xcode8-beta2

7
推荐指数
2
解决办法
1173
查看次数

UIViewControllerTransitioningDelegate方法未在iOS 7中调用

我通过实现UIViewControllerTransitioningDelegate协议中的方法为模态视图控制器创建了自定义过渡动画.

在iOS 8和9中,方法被正常调用并且过渡有效.但是,在iOS 7中,animationControllerForPresentedController:presentingController:sourceController:永远不会调用该方法.该animationControllerForDismissedController:方法仍然被正常调用.

#import "MyModalTransitioningDelegate.h"
#import "MyModalFadeTransition.h"

@implementation MyModalTransitioningDelegate

- (id<UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented
                                                                  presentingController:(UIViewController *)presenting
                                                                      sourceController:(UIViewController *)source
{
    return [[MyModalFadeTransition alloc] init];
}

- (id<UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed
{
    return [[MyModalFadeTransition alloc] init];
}

@end
Run Code Online (Sandbox Code Playgroud)

在模态视图控制器(即"呈现的控制器")中,我在其-viewDidLoad方法中有以下内容:

self.modalTransitionDelegate = [[OTModalTransitioningDelegate alloc] init]; // This is a custom strong private property due to `tranisitioningDelegate` being a weak property.
self.transitioningDelegate = self.modalTransitionDelegate;
self.modalPresentationStyle = UIModalPresentationCustom;
Run Code Online (Sandbox Code Playgroud)

modalPresentationStyle在任何版本的iOS中设置似乎没有任何区别.没有被调用的方法确实说它在iOS 7中可用,所以我不确定它为什么没有被调用.

模式视图控制器在呈现视图控制器中显示以下代码:

[self presentViewController:self.modalViewController
                   animated:YES
                 completion:nil];
Run Code Online (Sandbox Code Playgroud)

iphone objective-c ios

4
推荐指数
2
解决办法
6293
查看次数

iOS 9自定义转换 - 未调用animationControllerForDismissedController

我是iOS开发中的新手,最近在iOS 9中通过自定义过渡遇到了这个问题.

我有一个对象符合UIViewControllerTransitioningDelegate协议和实现animationControllerForDismissedController,如:

@implementation MyCustomizedTransitioningDelegate

#pragma mark - UIViewControllerTransitioningDelegate

- (id<UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed
{
    MyCustomizedTransitionAnimator *animator = [[MyCustomizedTransitionAnimator alloc] init];
    animator.presenting = NO;
    return animator;
}

@end
Run Code Online (Sandbox Code Playgroud)

触发模态转换的过程如下:

@implementation MyViewController

#pragma mark - Initializers

+ (MyCustomizedTransitioningDelegate *)modalTransitioningDelegateSingletonInstance;
{
    static MyCustomizedTransitioningDelegate *delegateInst = nil;
    static dispatch_once_t onceToken = 0;
    dispatch_once(&onceToken, ^{
        delegateInst = [[MyCustomizedTransitioningDelegate alloc] init];
    });

    return delegateInst;
}

#pragma mark - UIViewController

- (void)dismissViewControllerAnimated:(BOOL)animated completion:(void (^)(void))completion;
{
    [self prepareForDismissViewControllerAnimated:animated completion:&completion];
    [super dismissViewControllerAnimated:animated completion:completion];
}

- (void)prepareForDismissViewControllerAnimated:(BOOL)animated …
Run Code Online (Sandbox Code Playgroud)

objective-c uiviewcontroller ios custom-transition ios9

2
推荐指数
1
解决办法
2754
查看次数