public static class Application
{
+ #region PanGestureRecognizerShouldRecognizeSimultaneously
public static readonly BindableProperty PanGestureRecognizerShouldRecognizeSimultaneouslyProperty = BindableProperty.Create("PanGestureRecognizerShouldRecognizeSimultaneously", typeof(bool), typeof(Application), false);
public static bool GetPanGestureRecognizerShouldRecognizeSimultaneously(BindableObject element)
SetPanGestureRecognizerShouldRecognizeSimultaneously(config.Element, value);
return config;
}
+ #endregion
+
+ #region HandleControlUpdatesOnMainThread
+ public static readonly BindableProperty HandleControlUpdatesOnMainThreadProperty = BindableProperty.Create("HandleControlUpdatesOnMainThread", typeof(bool), typeof(Application), false);
+
+ public static bool GetHandleControlUpdatesOnMainThread(BindableObject element)
+ {
+ return (bool)element.GetValue(HandleControlUpdatesOnMainThreadProperty);
+ }
+
+ public static void SetHandleControlUpdatesOnMainThread(BindableObject element, bool value)
+ {
+ element.SetValue(HandleControlUpdatesOnMainThreadProperty, value);
+ }
+
+ public static bool GetHandleControlUpdatesOnMainThread(this IPlatformElementConfiguration<iOS, FormsElement> config)
+ {
+ return GetHandleControlUpdatesOnMainThread(config.Element);
+ }
+
+ public static IPlatformElementConfiguration<iOS, FormsElement> SetHandleControlUpdatesOnMainThread(this IPlatformElementConfiguration<iOS, FormsElement> config, bool value)
+ {
+ SetHandleControlUpdatesOnMainThread(config.Element, value);
+ return config;
+ }
+ #endregion
}
}
using CoreAnimation;
using Xamarin.Forms.Internals;
#if __MOBILE__
+using Xamarin.Forms.PlatformConfiguration.iOSSpecific;
namespace Xamarin.Forms.Platform.iOS
#else
public VisualElementTracker(IVisualElementRenderer renderer)
{
- if (renderer == null)
- throw new ArgumentNullException("renderer");
+ Renderer = renderer ?? throw new ArgumentNullException("renderer");
_propertyChangedHandler = HandlePropertyChanged;
_sizeChangedEventHandler = HandleSizeChanged;
_batchCommittedHandler = HandleRedrawNeeded;
- Renderer = renderer;
renderer.ElementChanged += OnRendererElementChanged;
SetElement(null, renderer.Element);
}
#if !__MOBILE__
var viewParent = view.RealParent as VisualElement;
var parentBoundsChanged = _lastParentBounds != (viewParent == null ? Rectangle.Zero : viewParent.Bounds);
+#else
+ var thread = !boundsChanged && !caLayer.Frame.IsEmpty && Application.Current?.OnThisPlatform()?.GetHandleControlUpdatesOnMainThread() == false;
#endif
- var thread = !boundsChanged && !caLayer.Frame.IsEmpty;
-
var anchorX = (float)view.AnchorX;
var anchorY = (float)view.AnchorY;
var translationX = (float)view.TranslationX;
var updateTarget = Interlocked.Increment(ref _updateCount);
- Action update = () =>
+ void update()
{
if (updateTarget != _updateCount)
return;
transform = transform.Rotate(rotation * (float)Math.PI / 180.0f, 0.0f, 0.0f, 1.0f);
caLayer.Transform = transform;
- };
+ }
#if __MOBILE__
if (thread)
Performance.Stop(reference);
}
}
-}
\ No newline at end of file
+}