Swift - 如何从底部显示UIView

时间:2018-04-09 00:06:12

标签: ios swift

我是Android开发人员,现在我开始在Swift开发。我想知道如何从底部显示UIView,如下所示:enter image description here

到现在为止我知道如何做到这一点,但是使用底部视图作为UIViewController,我有一天在Stackoverflow上看到了这个问题。 https://github.com/luangs7/BottomDialogSwift

嗯,总而言之,我只需要在底部使用自定义UIView显示xib,其中包含自定义height

2 个答案:

答案 0 :(得分:3)

你可以通过做一些动画来实现这一点。如果您正在使用故事板,那么为您的视图提供约束,

  

ViewToAnimates.leading = safeArea.leading" constant = 0"
  ViewToAnimates.trailing = safeArea.trailing" constant = 0"
  ViewToAnimates.top = safeArea.bottom" constant = 0"(您的视图将放置在ViewControllers主视图下方)

现在显示你的观点,

@IBOutlet weak var viewToAnimateOutlet: UIView!
@IBAction func showViewButtonAction(_ sender: Any) {
UIView.animate(withDuration: 1.5) {
    self.viewToAnimateOutlet.center.y -= self.viewToAnimateOutlet.frame.height
   }
}
@IBAction func hideViewButtonAction(_ sender: Any) {
UIView.animate(withDuration: 1.5) {
    self.viewToAnimateOutlet.center.y += self.viewToAnimateOutlet.frame.height
   }
}

See this question and answeres

答案 1 :(得分:1)

您可以使用自定义动画完成您想要的图片,另一个视图顶部的模式。

您可以在屏幕上显示的名为.transitioningDelegate的UIViewController上设置属性,并使UIViewController在屏幕上显示为委托。在UIViewControllerTransitioningDelegate上实施的方法中,您需要返回UIViewControllerAnimatedTransitioning的自定义实例。

您可以继承NSObject and have it adhere to the protocols of UIViewControllerTransitioningDelegate`。在该对象中,您可以控制位于其他对象之上的视图的自定义大小,屏幕上的位置以及如何为其设置动画。如果您想在该视图和屏幕上的其他视图之间放置任何其他视图,例如灰色半透明视图。

你在方法中做到了这一切:

func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
 //here is where you do your magic custom animation
}

func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
    //set the duration of the animation here
}

要使其工作,请将您的模态视图设置为故事板的任何其他成员,并使用UIViewControllersegue链接到该视图,并使用UIViewController进行动画处理。

然后使用 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let vc = segue.destination as? MyCustomModalView { vc.transitioningDelegate = self vc.modalPresentationStyle = .overFullScreen } } 方法

SELECT id, pid
FROM posts
WHERE fid IN (1,2,3)
AND author = 'Eddy'
GROUP BY IF(pid > 0, pid, id)
ORDER BY IF(latest > timestamp, latest, timestamp) DESC
LIMIT 1, 5;

引用该视图并将transitioningDelegate设置为self,(或其他一些对象)

互联网上有很多教程可以引导您完成这个过程,一旦您理解了流程就不那么难了

我会从Ray wenderlich one here

开始