2015-09-07 2 views
0

Я пытался выполнить это в течение последних 3 часов, и я не мог понять, как это сделать. Может ли кто-нибудь ПОЖАЛУЙСТА помочь?Помещение модального вида на вид и создание фона серого

Так вот что я пытаюсь сделать. Когда я нажимаю кнопку, скажем, кнопку Sign In, я хочу, чтобы появилось модальное представление, которое заставляет его смотреть серым и неподъемным. И на этом модальном представлении я хочу несколько кнопок и статических меток.

Я читал и пытался понять несколько ресурсов, таких как: Present modal view controller in half size parent controller, http://makeapppie.com/2014/08/30/the-swift-swift-tutorials-adding-modal-views-and-popovers/, How to use modal views in swift? и несколько других позиций. Однако мне так сложно понять код.

До сих пор у меня есть этот код, который предполагается сделать вид модального быть на вершине зрения позади него:

@IBAction func signIn(sender: AnyObject) { 
    self.modalTransitionStyle = UIModalTransitionStyle.CoverVertical 
    // Cover Vertical is necessary for CurrentContext 
    self.modalPresentationStyle = .CurrentContext 
    // Display on top of current UIView 
    self.presentViewController(SignInViewController(), animated: true, completion: nil) 
} 

Но это не производит эффект, который я хочу. Кто-нибудь, пожалуйста, помогите?

ответ

0

Во-первых, создать свой серый пустой вид

func makeGrayView() -> UIView { 
    var view = UIView(frame:UIScreen.mainScreen().applicationFrame) 
    self.view.backgroundColor = UIColor.greyColor() 
    return view 
} 

Во-вторых, установить вид только что созданный в качестве фона вашего наложения

var backView = self.makeGrayView() 
self.view.addSubview(backView) 
+0

Не могли бы вы предоставить код в Swift? Я супер noob ... – Jae

+0

@Jae Я отредактировал ответ. Надеюсь это поможет. – Dree

0

Вы должны использовать Cusotm UIViewControllerAnimation класс для достижения этой цели. Используйте приведенный выше код. Создание TransparentTransition.h and .m File

#import <Foundation/Foundation.h> 

@interface TransparentTransition :NSObject<UIViewControllerAnimatedTransitioning,UIViewControllerTransitioningDelegate>{ 
BOOL isPresenting; 
} 
@end 

//TransparentTransition.m

#import "TransparentTransition.h" 

@implementation TransparentTransition 
- (NSTimeInterval)transitionDuration:(id <UIViewControllerContextTransitioning>)transitionContext{ 
return 0.8f; 
} 

- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext{ 

UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; 
UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; 
UIView *toView = toVC.view; 
UIView *fromView = fromVC.view; 

UIView* containerView = [transitionContext containerView]; 


// Position the presented view off the top of the container view 

if(isPresenting){ 
    [containerView addSubview:toView]; 
    toView.frame = CGRectMake(0, -toView.frame.size.height, toView.frame.size.width, toView.frame.size.height); 
    [UIView animateWithDuration:[self transitionDuration:transitionContext] 
          delay:0 
     usingSpringWithDamping:.8 
      initialSpringVelocity:6.0 
         options:0 
        animations:^{ 
          toView.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"black_patch.png"]]; 
         CGAffineTransform scaleTrans = CGAffineTransformMakeScale(1.0f, 1.0f); 
         CGAffineTransform lefttorightTrans = CGAffineTransformMakeTranslation(0.f,+toView.frame.size.height); 
         toView.transform = CGAffineTransformConcat(scaleTrans, lefttorightTrans); 


        } 
        completion:^(BOOL finished){ 
         [transitionContext completeTransition:YES]; 

        }]; 

} 
else{ 

    [UIView animateWithDuration:[self transitionDuration:transitionContext] 
          delay:0 
         options:0 
        animations:^{ 
         //        toView.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"black_patch.png"]]; 
         CGAffineTransform scaleTrans = CGAffineTransformMakeScale(1.0f, 1.0f); 
         CGAffineTransform lefttorightTrans = CGAffineTransformMakeTranslation(0,-fromView.frame.size.height); 
         fromView.transform = CGAffineTransformConcat(scaleTrans, lefttorightTrans); 


        } 
        completion:^(BOOL finished){ 
         [transitionContext completeTransition:![transitionContext transitionWasCancelled]]; 
        }]; 


    } 

    } 



- (id <UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source{ 

isPresenting=YES; 
return self; 
} 

- (id <UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed{ 
isPresenting=NO; 
return self; 
} 

- (UIDynamicAnimator*)animateForTransitionContext:(id<UIViewControllerContextTransitioning>)transitionContext { 
// Has to be implemented by subclasses 
return nil; 
} 

// Использование Над Animation

var transitionManager:TransparentTransition 
@IBAction func signIn(sender: AnyObject) { 

let detail = self.storyboard?.instantiateViewControllerWithIdentifier("detail") as! DetailViewController 
    detail.modalPresentationStyle = UIModalPresentationStyle.Custom; 
    detail.transitioningDelegate = transitionManager; 
self.presentViewControllerdetail, animated: true, completion: nil) 
} 

Также здесь хороший учебник, который объясняет, как сделать такой крутой анимации http://www.appcoda.com/custom-view-controller-transitions-tutorial/

+0

Не могли бы вы предоставить код в Swift? – Jae

+0

u может создать отдельный файл анимации код, который я предоставил, и импортировать этот файл в заголовок моста Object-C и использовать. Я отредактировал сообщение об использовании в swift.Its большой файл, я не могу его перевести в swift Теперь. – Mukesh

0

Вы можете сделать это с помощью раскадровка. Сначала перетащите кнопку на свой первый UIViewController. enter image description here

Затем подключите кнопку к действию, как так

@IBAction func presentForm() { 
    self.view.backgroundColor = UIColor.lightGrayColor() 
} 

Хорошо, во-вторых, перетащить другой UIViewController на раскадровке и Ctrl перетащите кнопку на этот контроллер для создания SEGUE. Используйте те же настройки, что и у меня ниже. Представьте модально & над полноэкранным. enter image description here

ОК. Далее следует создать ваш лист формы на втором ViewController. Я добавил простой ниже. Следующим шагом будет выбор вида на втором контроллере представления. Это необходимо для изменения цвета фонового изображения на «Очистить цвет». На изображении отображается вид в иерархии и задний фон, выбранный как «Очистить». enter image description here

Затем перетащите еще один вид сверху, где будут элементы вашей формы. Подобно ярлыку и текстовым полям, которые у меня есть. Когда вы создаете и запускаете проект, у вас будут следующие экраны.enter image description hereenter image description here

Обратите внимание, что вам придется добавить свои собственные ограничения макета, но они просты. Вы также можете играть с кодом. Как изменение значения Opaque первого Viewcontroller на кнопке нажмите и т. Д. Этого должно быть достаточно, чтобы вы начали.

Смежные вопросы