2016-01-10 1 views
0

Я портирую один из своих собственных фрагментов кода от Objective-C до Swift, частично как учебное упражнение и частично потому, что начинаю новое приложение.Идентификация события CALayer on Touch (портирование функционального кода на Swift)

Я создал класс CALayer-derived, который содержит массив подуровня CALayers. Я использую это как расширяющееся меню значков. Репозиторий Obj-C здесь, если это помогает: https://github.com/lofdev/AnimatedIconDrawer.

Экземпляр класса встраивается в UIViewController, и в Objective-C, я использую это для вызова экземпляра, ссылаясь на ребенок подслой, так что я могу сделать забавные вещи, к примеру.

// _drawer is the instance of a CALayer-derived class 
    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
     if ([touches count] == 1) { 
      for (UITouch *touch in touches) { 
       CGPoint point = [touch locationInView:[touch view]]; 
       point = [[touch view] convertPoint:point toView:nil]; 
       CALayer *layer = [(CALayer *)self.view.layer.presentationLayer hitTest:point]; 

       NSInteger clicked_item = [_drawer toggleOpenCloseWithTappedLayer:layer]; 
      } 
     } 
    } 

Во всяком случае, я перенес код Swift, и я, кажется, получать неправильные ссылки на объекты. Вот портированный код.

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     if touches.count > 0 { 
      NSLog("Got a touch.") 
     } 
     for touch in touches { 
      let point = touch.locationInView(touch.view) 
      let point_view = touch.view?.convertPoint(point, toView: nil) 

     // This line does not work properly... my guess 
      let point_layer = CALayer(layer: view.layer.presentationLayer()!).hitTest(point_view!) 

      let clicked_item = drawer.toggleOpenCloseWithTappedLayer(point_layer!) 
     } 
    } 

Я предполагаю, что я делаю что-то неправильно, но я не могу понять, как это понять. Могу ли я предположить, что это связано с указателем.

Любая помощь будет оценена по достоинству. И, пожалуйста, будьте осторожны. Я новичок в Swift.

Спасибо,

+0

Попробуйте 'пусть point_layer = (? View.layer.presentationLayer(), как CALayer) ? .hitTest (point_view!) ' – vacawama

ответ

1

Попробуйте заменить:

let point_layer = CALayer(layer: view.layer.presentationLayer()!).hitTest(point_view!) 

С:

let point_layer = CALayer(layer: (self.view.layer.presentationLayer()?.hitTest(point_view!))!) 

Late