У меня есть кнопка создана ProgramaticallyСоздание плавающей перетаскивания в состоянии кнопку без раскадровки программно (Xamarin)
InfoBtn = _utilProvider.FloatingBtn("My Button"); //Returns Floating UIButton
InfoBtn.Frame = new CGRect((ScreenWidth/2) - 22.5, ScreenHeight - 65, 55, 55);
View.Add(InfoBtn);
Я хочу добавить перетащить способность к нему программно. Проблема заключается в том, что события подключили на Xamarin обыкновение позвольте мне использовать обработчики особых событий, таких как UIEvent
таким образом (непосредственно преобразованные из https://www.cocoanetics.com/2010/11/draggable-buttons-labels/ IOS, например):
InfoBtn.TouchDragInside += (btn, uievent) =>
{
var button = (UIButton)btn;
var e = (UIEvent)uievent; //ERROR: Can not convert type 'System.EventArgs' to 'UIKit.UIEvent'
// get the touch
UITouch touch = (UITouch)e.TouchesForView(button).AnyObject;
// get delta
CGPoint previousLocation = touch.PreviousLocationInView(button);
CGPoint location = touch.LocationInView(button);
nfloat delta_x = location.X - previousLocation.X;
nfloat delta_y = location.Y - previousLocation.Y;
// move button
button.Center = new CGPoint(button.Center.X + delta_x, button.Center.Y + delta_y);
};
Согласно примеру Xamarin для Using Touch in iOS
https://developer.xamarin.com/guides/ios/application_fundamentals/touch/ios_touch_walkthrough/ они используют Раскадровка.
обычай UIViewController
создается
partial class TouchViewController : UIViewController
и назначен на ViewController, установив специальный класс
Как это может customClass
быть установлен программно?
Я также попытался добавить UIGestureRecognizer
InfoBtn.AddGestureRecognizer(new MyGestureRecognizer());
partial class MyGestureRecognizer : UIGestureRecognizer
{
public override void TouchesBegan(NSSet touches, UIEvent evt)
{
base.TouchesBegan(touches, evt);
UITouch touch = touches.AnyObject as UITouch;
if (touch != null)
{
// Touch started
}
}
public override void TouchesCancelled(NSSet touches, UIEvent evt)
{
base.TouchesCancelled(touches, evt);
}
public override void TouchesEnded(NSSet touches, UIEvent evt)
{
base.TouchesEnded(touches, evt);
}
public override void TouchesMoved(NSSet touches, UIEvent evt)
{
base.TouchesMoved(touches, evt);
UITouch touch = touches.AnyObject as UITouch;
if (touch != null)
{
// move the shape
}
}
}
Но это только когда-либо входит TouchesBegan
метод.
На данный момент я разочарован, попробовав в основном каждый обучаемый, найденный в Интернете.
Любая помощь будет высоко ценится