Я портирую один из своих собственных фрагментов кода от 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
.
Спасибо,
Попробуйте 'пусть point_layer = (? View.layer.presentationLayer(), как CALayer) ? .hitTest (point_view!) ' – vacawama