public static UIImage ComposeButtonImage(UIImage thumbImage, float alpha = 1.0f) { // Get images and masks var maskImage = thumbImage; var invertedImage = thumbImage.Inverted(); var thumbnailImage = thumbImage; if (invertedImage != null) { thumbnailImage = invertedImage; } // Compose a button image based on a white background and the inverted thumbnail image. UIGraphics.BeginImageContextWithOptions(maskImage.Size, false, 0.0f); var maskDrawRect = new CGRect(CGPoint.Empty, maskImage.Size); var thumbDrawRect = new CGRect(CGPointExtensions.FromSize(maskImage.Size.Subtract(thumbImage.Size).Divide(2f)), thumbImage.Size); maskImage.Draw(maskDrawRect, CGBlendMode.Normal, alpha); thumbnailImage.Draw(thumbDrawRect, CGBlendMode.Normal, alpha); var composedImage = UIGraphics.GetImageFromCurrentImageContext(); UIGraphics.EndImageContext(); // Return results return(composedImage); }
public void UpdateTranslation(VirtualObject virtualObject, CGPoint midpoint) { if (!TranslationThresholdPassed) { var initialLocationToCurrentLocation = midpoint.Subtract(InitialMidpoint); var distanceFromStartLocation = initialLocationToCurrentLocation.Length(); // Check if the translate gesture has crossed the threshold. // If the user is already rotating and or scaling we use a bigger threshold. var threshold = TranslationThreshold; if (RotationThresholdPassed || TranslationThresholdPassed) { threshold = TranslationThresholdHarder; } if (distanceFromStartLocation >= threshold) { TranslationThresholdPassed = true; var currentObjectLocation = CGPointExtensions.FromVector(SceneView.ProjectPoint(virtualObject.Position)); DragOffset = midpoint.Subtract(currentObjectLocation); } } if (TranslationThresholdPassed) { var offsetPos = midpoint.Subtract(DragOffset); manager.Translate(virtualObject, SceneView, offsetPos, false, true); LastUsedObject = virtualObject; } }