Estoy presentando un modal de controlador de vista como una forma de la hoja y descartarlo cuando el botón cancelar, que es un botón de la barra de punto, se hace clic. Tengo que cerrarlo cuando me toque fuera de ese punto de vista. Por favor me ayude con una referencia. Nota: mi modal de controlador de vista se presenta con un controlador de navegación.

@cli_hlt, @Bill Brasky gracias por tu respuesta. Tengo que cerrarlo cuando toca se produce fuera de la vista modal, que es una forma de hoja. Yo soy de pegar el código de abajo.

-(void)gridView:(AQGridView *)gridView didSelectItemAtIndex:(NSUInteger)index  
{        
    if(adminMode) 
    {
        CHEditEmployeeViewController *editVC = [[CHEditEmployeeViewController alloc] initWithNibName:@"CHEditEmployeeViewController" bundle:nil];
        editVC.delegate = self;
        editVC.pickedEmployee = employee;
        editVC.edit = TRUE;
        editVC.delegate = self;
        UINavigationController *navigationController = [[UINavigationController alloc]initWithRootViewController:editVC];
        navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
        [self presentModalViewController:navigationController animated:YES];

        return;
    }   //the above code is from the view controller which presents the modal     view. Please look at the below code too which is from my modal view controller. Please guide me in a proper way.   -(void)tapGestureRecognizer {

    UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapBehind:)];
    [recognizer setNumberOfTapsRequired:1];
    recognizer.cancelsTouchesInView = NO; //So the user can still interact with controls in the modal view
    [self.view addGestureRecognizer:recognizer];

}

- (void)handleTapBehind:(UITapGestureRecognizer *)sender
{
    if (sender.state == UIGestureRecognizerStateEnded) 
    {
        CGPoint location = [sender locationInView:nil]; //Passing nil gives us coordinates in the window

    //Then we convert the tap's location into the local view's coordinate system, and test to see if it's in or outside. If outside, dismiss the view.

        if (![self.view pointInside:[self.view convertPoint:location fromView:self.view.window] withEvent:nil]) 
        {
            [self dismissModalViewControllerAnimated:YES];
            [self.view.window removeGestureRecognizer:sender];
        }

    }
}
InformationsquelleAutor jessy | 2012-02-01

13 Comentarios

  1. 4

    Ah, ok. Así que me temo que eso no es muy posible que el uso de la presentModalViewController: método. La idea de una «modal» vista/ventana/cuadro de mensaje/etc. pp. es que el usuario no hacer otra cosa que el procesamiento de lo que la vista/ventana/cuadro de mensaje/etc. pp. quiere que él/ella haga.

    Lo que usted quiere hacer en su lugar no está presente un modal de controlador de vista, pero en lugar de cargar y mostrar su forma de controlador de vista de la forma habitual. Nota en el controlador maestro que el formulario es solo para mostrarles por ejemplo, con una variable de tipo BOOL y, a continuación, mango hay grifos que puedan producirse. Si el formulario está mostrando, que la desestime.

    • Esto también va a despedir el modal si pulsa sobre cualquier cosa dentro de la modalidad de la vista, así que no está conectado. (espacio en blanco, etc.)
    • Pensé que su intención era despedir el modal cuando se pulsa fuera de los elementos de formulario – no sólo el botón cancelar?
    • Posiblemente. Sólo pensé que valía la pena mencionar que en caso de que no dan los resultados esperados. La pregunta parecía como ellos querían despedir al tocar fuera de la forma de hoja de la vista, así que quería dejar las cosas claras.
    • Señaló que, editado mi respuesta en consecuencia.
    • He editado mi pregunta, por Favor, eche un vistazo a ellos.Gracias.
    • He actualizado mi respuesta.

  2. 70

    Sé que esta es una vieja cuestión, pero ES posible, a pesar de lo que la respuesta «correcta», dice. Dado que este fue el primer resultado cuando estaba buscando esto me decidí a elaborar:

    Esta es la manera de hacerlo:

    Usted necesita para agregar una propiedad a la Vista Controlador desde la que desea presentar de forma modal, en mi caso «tapBehindGesture».

    a continuación, en viewDidAppear

    if(!tapBehindGesture) {
            tapBehindGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapBehindDetected:)];
            [tapBehindGesture setNumberOfTapsRequired:1];
            [tapBehindGesture setCancelsTouchesInView:NO]; //So the user can still interact with controls in the modal view
        }
    
    [self.view.window addGestureRecognizer:tapBehindGesture];

    Y Aquí está la aplicación para tapBehindDetected

    - (void)tapBehindDetected:(UITapGestureRecognizer *)sender
    {
    
        if (sender.state == UIGestureRecognizerStateEnded)
        {
            //(edited) not working for ios8 above 
            //CGPoint location = [sender locationInView:nil]; //Passing nil gives us coordinates in the window
    
            CGPoint location = [sender locationInView: self.presentingViewController.view];
    
            //Convert tap location into the local view's coordinate system. If outside, dismiss the view.
            if (![self.presentedViewController.view pointInside:[self.presentedViewController.view convertPoint:location fromView:self.view.window] withEvent:nil])
            {   
                if(self.presentedViewController) {
                    [self dismissViewControllerAnimated:YES completion:nil];
                }
            }
        }
    }

    Recuerda quitar tapBehindGesture de view.window en viewWillDisappear para evitar que se desencadene handleTapBehind en un sin asignar objeto.

    • Funciona muy bien (iOS7). Otras personas utilizando este código debe tomar nota de self.presentedViewController.view. Si la implementación de un gesto en el interior de la modal controlador de vista, sólo debe utilizar self.view lugar.
    • ¿Alguien sabe cómo solucionar este problema para iOS8? o acaso hay una mejor solución?
    • Kevin, ¿a qué te refieres por «arreglar»en iOS8? ¿Qué problema está recibiendo?
    • También tengo problemas con iOS8 como Kevin. Y sé que no deberíamos estar discutiendo versiones beta aquí, así que sigue este enlace: devforums.apple.com/thread/243768
    • la adición de la UIGestureRecognizerDelegate desde abajo no funciona, pero parece convertPoint:fromView: devuelve un valor diferente en iOS8 de iOS7, por lo que el toque ubicación es incorrecta.
    • en el segundo aspecto, que podría ser más bien que locationInView: tiene una devolución diferente en iOS 8
    • Tiene todo funcionando bien en iOS 8. Además de la adición de la UIGestureRecognizer, de intercambio location si está en orientación horizontal.
    • He cambiado la ubicación por seguir el código: CGPoint ubicación = [tapSender locationInView: auto.presentingViewController.ver];
    • de hecho esta es la única solución que trabajó para mí. muchas gracias! Esta respuesta parece estar roto, se debe reemplazar con su respuesta.

  3. 26

    He resuelto iOS 8 problema mediante la adición de delegar en gesto de reconocimiento de

    [taprecognizer setDelegate:self];

    con estas respuestas

    #pragma mark - UIGestureRecognizer Delegate
    
    - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
        return YES;
    }
    
    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
        return YES;
    }
    
    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
        return YES;
    }

    que me funciona con iOS 8 GM

    • Que funcionó! En particular, gestureRecognizer: shouldRecognizeSimultaneouslyWithGestureRecognizer debe ser implementado para volver YES
    • También hay un problema con las coordenadas en la orientación horizontal. Ver mi solución aquí: stackoverflow.com/a/25844208/118293
  4. 16

    Como lo que yo puedo decir nada de la respuesta parece estar a trabajar de inmediato en todas las condiciones.

    Mi solución (ya sea heredar de ella o pegarlo en):

    @interface MyViewController () <UIGestureRecognizerDelegate>
    @property (strong, nonatomic) UITapGestureRecognizer *tapOutsideRecognizer;
    @end
    -(void)viewDidAppear:(BOOL)animated
    {
    [super viewDidAppear:animated];
    if (!self.tapOutsideRecognizer) {
    self.tapOutsideRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapBehind:)];
    self.tapOutsideRecognizer.numberOfTapsRequired = 1;
    self.tapOutsideRecognizer.cancelsTouchesInView = NO;
    self.tapOutsideRecognizer.delegate = self;
    [self.view.window addGestureRecognizer:self.tapOutsideRecognizer];
    }
    }
    -(void)viewWillDisappear:(BOOL)animated
    {
    [super viewWillDisappear:animated];
    //to avoid nasty crashes
    if (self.tapOutsideRecognizer) {
    [self.view.window removeGestureRecognizer:self.tapOutsideRecognizer];
    self.tapOutsideRecognizer = nil;
    }
    }
    #pragma mark - Actions 
    - (IBAction)close:(id)sender
    {
    [self dismissViewControllerAnimated:YES completion:nil];
    }
    - (void)handleTapBehind:(UITapGestureRecognizer *)sender
    {
    if (sender.state == UIGestureRecognizerStateEnded)
    {
    CGPoint location = [sender locationInView:nil]; //Passing nil gives us coordinates in the window
    //Then we convert the tap's location into the local view's coordinate system, and test to see if it's in or outside. If outside, dismiss the view.
    if (![self.view pointInside:[self.view convertPoint:location fromView:self.view.window] withEvent:nil])
    {
    //Remove the recognizer first so it's view.window is valid.
    [self.view.window removeGestureRecognizer:sender];
    [self close:sender];
    }
    }
    }
    #pragma mark - Gesture Recognizer
    //because of iOS8
    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
    return YES;
    }
    • Gracias por esta respuesta, he traducido en Swift, ver más abajo
    • Esto funciona muy bien en iOS 10.
    • ¿Por qué eliminar el gesto de reconocimiento en el tapBehind método? No se que pasará en viewWillDisappear de todos modos, después de descartar?
  5. 14

    Aquí está mi versión que funciona para iOS 7 y iOS 8 y no requiere condicional intercambio de coordenadas:

    - (void)handleTapBehind:(UITapGestureRecognizer *)sender
    {
    if (sender.state == UIGestureRecognizerStateEnded)
    {
    CGPoint location = [sender locationInView:self.view];
    if (![self.view pointInside:location withEvent:nil]) {
    [self.view.window removeGestureRecognizer:self.recognizer];
    [self dismissViewControllerAnimated:YES completion:nil];
    }
    }
    }
    • Funciona como un encanto!
    • Esta respuesta es muy simple, tiene sentido, y funciona como se anuncia. Yo soy una especie de confuso en cuanto a por qué las otras respuestas están tratando de hacer algo mucho más complicado.
    • Gran respuesta. Funciona como un encanto en iOS8.
    • No trabajo para la orientación horizontal (iOS8 – iPad).
  6. 10

    Para iOS 8, debe implementar la UIGestureRecognizer por Martino respuesta, y el intercambio (x,y) las coordenadas de la girada ubicación cuando en la orientación horizontal. No estoy seguro si esto es debido a un iOS 8 error.

    - (void) viewDidAppear:(BOOL)animated
    {
    [super viewDidAppear:animated];
    //add gesture recognizer to window
    UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapBehind:)];
    [recognizer setNumberOfTapsRequired:1];
    recognizer.cancelsTouchesInView = NO; //So the user can still interact with controls in the modal view
    [self.view.window addGestureRecognizer:recognizer];
    recognizer.delegate = self;
    }
    - (void)handleTapBehind:(UITapGestureRecognizer *)sender
    {
    if (sender.state == UIGestureRecognizerStateEnded) {
    //passing nil gives us coordinates in the window
    CGPoint location = [sender locationInView:nil];
    //swap (x,y) on iOS 8 in landscape
    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) {
    if (UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) {
    location = CGPointMake(location.y, location.x);
    }
    }
    //convert the tap's location into the local view's coordinate system, and test to see if it's in or outside. If outside, dismiss the view.
    if (![self.view pointInside:[self.view convertPoint:location fromView:self.view.window] withEvent:nil]) {
    //remove the recognizer first so it's view.window is valid
    [self.view.window removeGestureRecognizer:sender];
    [self dismissViewControllerAnimated:YES completion:nil];
    }
    }
    }
    #pragma mark - UIGestureRecognizer Delegate
    - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
    {
    return YES;
    }
    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
    {
    return YES;
    }
    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
    {
    return YES;
    }
    • En el iOS 8 GM, no necesito hacer esto, así que debe haber sido un error que fue corregido.
    • No ha sido solucionado, yo necesarios para aplicar esta revisión en iOS 8.0.2
    • de nuevo en el modo de paisaje en el iPad, su respuesta detecta grifos dentro de la modal ver pero no grifos fuera.
  7. 10

    Swift 4 versión que funciona tanto en vertical y horizontal – no intercambio de x, y necesario.

    class TapBehindModalViewController: UIViewController, UIGestureRecognizerDelegate {
    private var tapOutsideRecognizer: UITapGestureRecognizer!
    override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    if (self.tapOutsideRecognizer == nil) {
    self.tapOutsideRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.handleTapBehind))
    self.tapOutsideRecognizer.numberOfTapsRequired = 1
    self.tapOutsideRecognizer.cancelsTouchesInView = false
    self.tapOutsideRecognizer.delegate = self
    self.view.window?.addGestureRecognizer(self.tapOutsideRecognizer)
    }
    }
    override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    if(self.tapOutsideRecognizer != nil) {
    self.view.window?.removeGestureRecognizer(self.tapOutsideRecognizer)
    self.tapOutsideRecognizer = nil
    }
    }
    func close(sender: AnyObject) {
    self.dismiss(animated: true, completion: nil)
    }
    //MARK: - Gesture methods to dismiss this with tap outside
    @objc func handleTapBehind(sender: UITapGestureRecognizer) {
    if (sender.state == UIGestureRecognizerState.ended) {
    let location: CGPoint = sender.location(in: self.view)
    if (!self.view.point(inside: location, with: nil)) {
    self.view.window?.removeGestureRecognizer(sender)
    self.close(sender: sender)
    }
    }
    }
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
    }

    }

    • Pequeña mejora para la correcta manipulación de vista de los controladores que se presenta desde el TapBehindModalViewController: func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { return self.presentedViewController == nil }
    • Hola! Para mí handleTapBehind no se llama en absoluto.
  8. 6

    Basado en Bart van Kuik la respuesta y NavAutoDismiss y otros grandes fragmentos de aquí.

    class DismissableNavigationController: UINavigationController, UIGestureRecognizerDelegate {
    private var tapOutsideRecognizer: UITapGestureRecognizer!
    override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    if tapOutsideRecognizer == nil {
    tapOutsideRecognizer = UITapGestureRecognizer(target: self, action: #selector(DismissableNavigationController.handleTapBehind))
    tapOutsideRecognizer.numberOfTapsRequired = 1
    tapOutsideRecognizer.cancelsTouchesInView = false
    tapOutsideRecognizer.delegate = self
    view.window?.addGestureRecognizer(tapOutsideRecognizer)
    }
    }
    override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    if tapOutsideRecognizer != nil {
    view.window?.removeGestureRecognizer(tapOutsideRecognizer)
    tapOutsideRecognizer = nil
    }
    }
    func close(sender: AnyObject) {
    dismissViewControllerAnimated(true, completion: nil)
    }
    func handleTapBehind(sender: UITapGestureRecognizer) {
    if sender.state == UIGestureRecognizerState.Ended {
    var location: CGPoint = sender.locationInView(nil)
    if UIInterfaceOrientationIsLandscape(UIApplication.sharedApplication().statusBarOrientation) {
    location = CGPoint(x: location.y, y: location.x)
    }
    if !view.pointInside(view.convertPoint(location, fromView: view.window), withEvent: nil) {
    view.window?.removeGestureRecognizer(sender)
    close(sender)
    }
    }
    }
    func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
    }
    }

    Uso:

    let vc = MyViewController()
    let nc = DismissableNavigationController(rootViewController: vc)
    nc.modalPresentationStyle = UIModalPresentationStyle.FormSheet
    presentViewController(nc, animated: true, completion: nil)
  9. 6

    @yershuachu la respuesta, en Swift 2:

    class ModalParentViewController: UIViewController, UIGestureRecognizerDelegate {
    private var tapOutsideRecognizer: UITapGestureRecognizer!
    override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    if(self.tapOutsideRecognizer == nil) {
    self.tapOutsideRecognizer = UITapGestureRecognizer(target: self, action: "handleTapBehind:")
    self.tapOutsideRecognizer.numberOfTapsRequired = 1
    self.tapOutsideRecognizer.cancelsTouchesInView = false
    self.tapOutsideRecognizer.delegate = self
    self.view.window?.addGestureRecognizer(self.tapOutsideRecognizer)
    }
    }
    override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    if(self.tapOutsideRecognizer != nil) {
    self.view.window?.removeGestureRecognizer(self.tapOutsideRecognizer)
    self.tapOutsideRecognizer = nil
    }
    }
    func close(sender: AnyObject) {
    self.dismissViewControllerAnimated(true, completion: nil)
    }
    func handleTapBehind(sender: UITapGestureRecognizer) {
    if (sender.state == UIGestureRecognizerState.Ended) {
    let location: CGPoint = sender.locationInView(nil)
    if (!self.view.pointInside(self.view.convertPoint(location, fromView: self.view.window), withEvent: nil)) {
    self.view.window?.removeGestureRecognizer(sender)
    self.close(sender)
    }
    }
    }
    func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
    }
    }
    • Ya no parece estar funcionando en iOS 9. auto.vista.ventana? es nula en un modalmente presentado controlador de vista
    • Acabo de probar este código funciona muy bien en Xcode 7. Gracias!
  10. 4

    Swift 3

    class ModalParentViewController: UIViewController, UIGestureRecognizerDelegate {
    private var tapOutsideRecognizer: UITapGestureRecognizer!
    override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    if(self.tapOutsideRecognizer == nil) {
    self.tapOutsideRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.handleTapBehind))
    self.tapOutsideRecognizer.numberOfTapsRequired = 1
    self.tapOutsideRecognizer.cancelsTouchesInView = false
    self.tapOutsideRecognizer.delegate = self
    appDelegate.window?.addGestureRecognizer(self.tapOutsideRecognizer)
    }
    }
    override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    if(self.tapOutsideRecognizer != nil) {
    appDelegate.window?.removeGestureRecognizer(self.tapOutsideRecognizer)
    self.tapOutsideRecognizer = nil
    }
    }
    func close(sender: AnyObject) {
    self.dismiss(animated: true, completion: nil)
    }
    //MARK: - Gesture methods to dismiss this with tap outside
    func handleTapBehind(sender: UITapGestureRecognizer) {
    if (sender.state == UIGestureRecognizerState.ended) {
    let location: CGPoint = sender.location(in: nil)
    if (!self.view.point(inside: self.view.convert(location, from: self.view.window), with: nil)) {
    self.view.window?.removeGestureRecognizer(sender)
    self.close(sender: sender)
    }
    }
    }
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
    }

    }

    • ¿Cómo acceder a appdelegate con el código ? Nada append cuando hago clic en fondo
    • @BadrFilali UIApplication.shared.delegate?.window??.addGestureRecognizer(self.tapOutsideRecognizer)
  11. 2

    Yo lo uso en este formulario sin ningún tipo de problemas ni en iOS 7.1 ni iOS 8.3.

    - (void)viewDidAppear:(BOOL)animated
    {
    [super viewDidAppear:animated];
    [self.view.window addGestureRecognizer:self.tapBehindGesture];
    }
    - (void)viewWillDisappear:(BOOL)animated
    {
    [super viewWillDisappear:animated];
    [self.view.window removeGestureRecognizer:self.tapBehindGesture];
    }
    - (UITapGestureRecognizer*)tapBehindGesture
    {    
    if (_tapBehindGesture == nil)
    {
    _tapBehindGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapBehindRecognized:)];
    _tapBehindGesture.numberOfTapsRequired = 1;
    _tapBehindGesture.cancelsTouchesInView = NO;
    _tapBehindGesture.delegate = self;
    }
    return _tapBehindGesture;
    }
    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
    {
    return YES;
    }
  12. 0

    Hice un navigationController que el auto que desestime para iPad

    https://github.com/curciosobrinho/NavAutoDismiss

    Es sólo el mismo código anterior, trabajando en iOS 8.

    Así, todos los créditos van para la gente de arriba.

    Yo sólo lo hice para ser más genérico y más fácil de usar.

    Le basta con copiar los archivos a su proyecto

    Importar el archivo de encabezado (.h)

    Y el uso de su viewcontroller (que quiere mostrar) como el rootViewController.

    Cómo usarlo:

    //Import the .h file
    #import "NavDismissViewController.h"
    //Instanciate your view controller (the view you want to present)
    YourViewController * yourVC = [YourViewController new];
    //Instanciate the NavDismissViewController with your view controller as the rootViewController
    NavDismissViewController *nav = [[NavDismissViewController alloc] initWithRootViewController:yourVC];
    //if you want to change the navigationBar translucent behaviour
    [nav.navigationBar setTranslucent:NO];
    //Choose the Modal style
    nav.modalPresentationStyle=UIModalPresentationFormSheet;
    //present your controller
    [self presentViewController:nav animated:YES completion:nil];
    //Done
  13. -2
    extension CGPoint {
    mutating func correctOrientation() {
    let screenSize = UIScreen.mainScreen().bounds
    switch(UIDevice.currentDevice().orientation) {
    case .Portrait:
    break
    case .PortraitUpsideDown:
    y = screenSize.height - y
    break
    case .LandscapeLeft:
    swap(&y, &x)
    y = screenSize.height - y
    break
    case .LandscapeRight:
    swap(&y, &x)
    x = screenSize.width - x
    break
    default:
    break
    }
    }
    }

Dejar respuesta

Please enter your comment!
Please enter your name here