2017-09-08 100 views
1

我已经完成了其他开发人员完成的一些项目,我必须处理一些修改。我有机会通过他们创建的弹出窗口。在这里我正在谈论与UILabels,UIButtons,UITextFields等定制弹出窗口,而不是UIAlertViewControllers或动作表。在同一视图控制器中的新视图控制器或弹出窗口中的新视图

许多开发人员(对我都比较高级)已经使用了这种方法,即在相同的视图控制器中添加一个视觉效果视图,并添加一个应该显示为弹出视图。在运行时,它们根据需求隐藏和显示视图。在这里,你不会给你的应用增加更多的权重,但是当你尝试用约束来编辑你的UI时,它会让你头痛。

而一些开发者已经使用了第三方库,例如'MZFormSheetController',在这里你创建一个单独的视图控制器并将其用作弹出视图。在这里,您可以根据需要添加/编辑UI控件及其约束。但是,将视图控制器添加到故事板的次数越多,就越增加故事板/应用程序的大小。

我想知道您的意见和什么是弹出窗口的最佳做法? (隐藏和显示在同一个视图控制器的视图或添加新的视图 - 控制)

+0

这是一个iPhone应用程序的所有控制“MMPopupView”?如果是,那么请继续可可,并找到适合你的为https://www.cocoacontrols.com/search?q = pop –

+0

嗨,我已经经历了可可控制,并且使用过这些弹出窗口。我需要知道什么是最好的方法。使用单独的视图控制器或在同一视图控制器上创建新视图?提前致谢! – NavodaP

回答

1

你可以做这样的事情在的viewController 1,当你点击一个按钮:

let ShareVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ShareVC") as! ShareVC 
    ShareVC.image = returnFinalImage() 
    self.addChildViewController(ShareVC) 
    ShareVC.view.frame = self.view.frame 
    self.view.addSubview(ShareVC.view) 
    ShareVC.didMove(toParentViewController: self) 

然后,只需设定的阿尔法值第二的viewController的主视图中viewDidLoad()这样的:

override func viewDidLoad() { 
     super.viewDidLoad() 
     self.view.backgroundColor = UIColor.black.withAlphaComponent(0.8) 
     self.showAnimate() 
} 

func showAnimate(){ 
    self.view.transform = CGAffineTransform(scaleX: 1.3, y: 1.3) 
    self.view.alpha = 0.0; 
    UIView.animate(withDuration: 0.25, animations: { 
     self.view.alpha = 1.0 
     self.view.transform = CGAffineTransform(scaleX: 1.0, y: 1.0) 
    }); 
} 

func removeAnimate(){ 
    UIView.animate(withDuration: 0.25, animations: { 
     self.view.transform = CGAffineTransform(scaleX: 1.3, y: 1.3) 
     self.view.alpha = 0.0; 
    }, completion:{(finished : Bool) in 
     if (finished) 
     { 
      self.view.removeFromSuperview() 
     } 
    }); 
} 

@IBAction func closeAction(_ sender:UIButton) { 
    removeAnimate() 
} 

enter image description here

或者你也可以模态地prese

let popup : PopupVC = self.storyboard?.instantiateViewControllerWithIdentifier("PopupVC") as! PopupVC 
let navigationController = UINavigationController(rootViewController: popup) 
navigationController.modalPresentationStyle = UIModalPresentationStyle.OverCurrentContext 
self.presentViewController(navigationController, animated: true, completion: nil) 

希望这是有帮助的:使用塞格斯并设置其表现特性,以“在目前的情况下”从属性检查

enter image description here

或者从代码中你可以这样做NT的视图控制器。快乐的编码。 :)

+0

谢谢,根据你的例子,你似乎更喜欢使用新的视图控制器作为弹出窗口,而不是在同一视图控制器上添加视图。 – NavodaP

+0

是啊!你做对了!正如你所说:“在这里,你不会给你的应用增加更多的权重,但是当你试图用约束来编辑你的UI时,它会让你头痛。”因此,这些选项是摆脱这些约束相关问题的最佳方式,并且更多地通过您的屏幕获得更多分类。这就是我这样做的原因。 –

+0

太棒了!非常感谢! – NavodaP

2

如果要创建自定义弹出窗口以在整个应用程序中使用,可以使用自定义设计创建单独的视图或视图控制器,该控制器将根据设置的值和约束来调整视图。

您可以存在于任何控制器的顶部是视图控制器(您可能无法一段时间存在,如果已经开了一个模型)

IMO,更好的选择是可以用于显示弹出创建一个单独的窗口。

写入显示和隐藏方法,可以从任何地方访问, 当需要隐藏时需要显示和删除该窗口时添加该新窗口。

或者,你可以使用现成的库像豆荚

+0

这也是一个不错的选择,因为它在swift 3 - >“ETPopupView”中。顺便说一句好方法。 –

相关问题