public static CGSize TPKeyboardAvoiding_calculatedContentSizeFromSubviewFrames(this UIScrollView scrollView) { bool wasShowingVerticalScrollIndicator = scrollView.ShowsVerticalScrollIndicator; bool wasShowingHorizontalScrollIndicator = scrollView.ShowsHorizontalScrollIndicator; scrollView.ShowsVerticalScrollIndicator = false; scrollView.ShowsHorizontalScrollIndicator = false; CGRect rect = new CGRect(0, 0, 0, 0); foreach (var subview in scrollView.Subviews) { rect = CGRect.Union(rect, subview.Frame); } var size = rect.Size; size.Height += kCalculatedContentPadding; rect.Size = size; scrollView.ShowsVerticalScrollIndicator = wasShowingVerticalScrollIndicator; scrollView.ShowsHorizontalScrollIndicator = wasShowingHorizontalScrollIndicator; return(rect.Size); }
private void UpdateSelectedPosition(bool animated) { // Labels this.UpdateLabelColors(); // Strip var y = this.selectedView.Frame.Y; var x = TabWidth * SelectedIndex + (TabWidth / 2); var height = this.selectedView.Frame.Height; var width = TabWidth; if (style.SelectedStripStyle == PagerStyle.StripStyle.Rounded) { width -= 2 * this.style.SelectedStripMargin; } else if (style.SelectedStripStyle == PagerStyle.StripStyle.Dot) { width = this.style.SelectedStripSize; } x -= width / 2; var destination = new CGRect(x, y, width, height); if (animated && this.style.SelectedStripAnimation != PagerStyle.StripAnimation.None) { if (this.style.SelectedStripAnimation == PagerStyle.StripAnimation.Stretched) { var step = CGRect.Union(selectedView.Frame, destination); var stepDuration = this.style.SelectedStripAnimationDuration / 2; UIView.Animate(stepDuration, 0, UIViewAnimationOptions.CurveEaseIn, () => this.selectedView.Frame = step, () => { UIView.Animate(stepDuration, 0, UIViewAnimationOptions.CurveEaseOut, () => this.selectedView.Frame = destination, () => { }); }); UIView.Animate(this.style.SelectedStripAnimationDuration, 0, UIViewAnimationOptions.CurveEaseInOut, () => { this.selectedView.BackgroundColor = GetStripColor(SelectedIndex); }, () => { }); } else if (this.style.SelectedStripAnimation == PagerStyle.StripAnimation.Constant) { UIView.Animate(this.style.SelectedStripAnimationDuration, 0, UIViewAnimationOptions.CurveEaseInOut, () => { this.selectedView.Frame = destination; this.selectedView.BackgroundColor = GetStripColor(SelectedIndex); }, () => { }); } } else { this.selectedView.Frame = destination; this.selectedView.BackgroundColor = GetStripColor(SelectedIndex); } }
public override void LayoutSubviews() { this.layoutPopupIfNeeded(); var boundingBox = (this.popup != null ? CGRect.Union(this.Bounds, this.popup.Frame) : this.Bounds); if (this.Bounds.Width == 0 || this.Bounds.Height == 0) { return; } if (oldBounds != null && boundingBox.Size.Equals(oldBounds?.Size)) { return; } oldBounds = boundingBox; base.LayoutSubviews(); CATransaction.Begin(); CATransaction.DisableActions = (true); this.background.Frame = this.Bounds; this.label.Frame = new CGRect(this.labelInset, this.labelInset, this.Bounds.Width - this.labelInset * 2, this.Bounds.Height - this.labelInset * 2); this.displayView.Frame = boundingBox; this.shadowView.Frame = boundingBox; this.borderView.Frame = boundingBox; this.underView.Frame = boundingBox; CATransaction.Commit(); this.refreshViews(); }
public override void Draw(CGRect rect) { using (var context = UIGraphics.GetCurrentContext()) { var bounds = Bounds; //UIColor background = Enabled ? isPressed ? HighlightedColor : NormalColor : DisabledColor; UIColor buttonColor = NormalColor; //UIColor.FromRGBA (0.00f, 0.37f, 0.89f, 1.00f); var buttonColorRGBA = new nfloat[4]; buttonColor.GetRGBA( out buttonColorRGBA [0], out buttonColorRGBA [1], out buttonColorRGBA [2], out buttonColorRGBA [3] ); if (isPressed) { // Get the Hue Saturation Brightness Alpha copy of the color var buttonColorHSBA = new nfloat[4]; buttonColor.GetHSBA( out buttonColorHSBA [0], out buttonColorHSBA [1], out buttonColorHSBA [2], out buttonColorHSBA [3] ); // Change the brightness to a fixed value (0.5f) buttonColor = UIColor.FromHSBA(buttonColorHSBA [0], buttonColorHSBA [1], 0.5f, buttonColorHSBA [3]); // Re-set the base buttonColorRGBA because everything else is relative to it buttonColorRGBA = new nfloat[4]; buttonColor.GetRGBA( out buttonColorRGBA [0], out buttonColorRGBA [1], out buttonColorRGBA [2], out buttonColorRGBA [3] ); } using (var colorSpace = CGColorSpace.CreateDeviceRGB()) { //// Abstracted Graphic Attributes var textContent = this.Title(UIControlState.Normal); //"STOP"; var font = UIFont.SystemFontOfSize(18); // ------------- START PAINTCODE ------------- //// Color Declarations UIColor frameColorTop = UIColor.FromRGBA(0.20f, 0.20f, 0.20f, 1.00f); UIColor frameShadowColor = UIColor.FromRGBA(1.00f, 1.00f, 1.00f, 0.40f); UIColor glossyColorBottom = UIColor.FromRGBA( (buttonColorRGBA [0] * 0.6f + 0.4f), (buttonColorRGBA [1] * 0.6f + 0.4f), (buttonColorRGBA [2] * 0.6f + 0.4f), (buttonColorRGBA [3] * 0.6f + 0.4f) ); UIColor glossyColorUp = UIColor.FromRGBA( (buttonColorRGBA [0] * 0.2f + 0.8f), (buttonColorRGBA [1] * 0.2f + 0.8f), (buttonColorRGBA [2] * 0.2f + 0.8f), (buttonColorRGBA [3] * 0.2f + 0.8f) ); //// Gradient Declarations var glossyGradientColors = new CGColor [] { glossyColorUp.CGColor, glossyColorBottom.CGColor }; var glossyGradientLocations = new nfloat [] { 0, 1 }; var glossyGradient = new CGGradient(colorSpace, glossyGradientColors, glossyGradientLocations); //// Shadow Declarations var frameInnerShadow = frameShadowColor.CGColor; var frameInnerShadowOffset = new CGSize(0, -0); var frameInnerShadowBlurRadius = 3; var buttonInnerShadow = UIColor.Black.CGColor; var buttonInnerShadowOffset = new CGSize(0, -0); var buttonInnerShadowBlurRadius = 12; var textShadow = UIColor.Black.CGColor; var textShadowOffset = new CGSize(0, -0); var textShadowBlurRadius = 1; var buttonShadow = UIColor.Black.CGColor; var buttonShadowOffset = new CGSize(0, isPressed ? 0 : 2); // ADDED this code after PaintCode var buttonShadowBlurRadius = isPressed ? 2 : 3; // ADDED this code after PaintCode //// outerFrame Drawing var outerFramePath = UIBezierPath.FromRoundedRect(new CGRect(2.5f, 1.5f, 120, 32), 8); context.SaveState(); context.SetShadow(buttonShadowOffset, buttonShadowBlurRadius, buttonShadow); frameColorTop.SetFill(); outerFramePath.Fill(); context.RestoreState(); UIColor.Black.SetStroke(); outerFramePath.LineWidth = 1; outerFramePath.Stroke(); //// innerFrame Drawing var innerFramePath = UIBezierPath.FromRoundedRect(new CGRect(5.5f, 4.5f, 114, 26), 5); context.SaveState(); context.SetShadow(frameInnerShadowOffset, frameInnerShadowBlurRadius, frameInnerShadow); buttonColor.SetFill(); innerFramePath.Fill(); ////// innerFrame Inner Shadow var innerFrameBorderRect = innerFramePath.Bounds; innerFrameBorderRect.Inflate(buttonInnerShadowBlurRadius, buttonInnerShadowBlurRadius); innerFrameBorderRect.Offset(-buttonInnerShadowOffset.Width, -buttonInnerShadowOffset.Height); innerFrameBorderRect = CGRect.Union(innerFrameBorderRect, innerFramePath.Bounds); innerFrameBorderRect.Inflate(1, 1); var innerFrameNegativePath = UIBezierPath.FromRect(innerFrameBorderRect); innerFrameNegativePath.AppendPath(innerFramePath); innerFrameNegativePath.UsesEvenOddFillRule = true; context.SaveState(); { var xOffset = buttonInnerShadowOffset.Width + (float)Math.Round(innerFrameBorderRect.Width); var yOffset = buttonInnerShadowOffset.Height; context.SetShadow( new CGSize(xOffset + (xOffset >= 0 ? 0.1f : -0.1f), yOffset + (yOffset >= 0 ? 0.1f : -0.1f)), buttonInnerShadowBlurRadius, buttonInnerShadow); innerFramePath.AddClip(); var transform = CGAffineTransform.MakeTranslation(-(float)Math.Round(innerFrameBorderRect.Width), 0); innerFrameNegativePath.ApplyTransform(transform); UIColor.Gray.SetFill(); innerFrameNegativePath.Fill(); } context.RestoreState(); context.RestoreState(); UIColor.Black.SetStroke(); innerFramePath.LineWidth = 1; innerFramePath.Stroke(); //// Rounded Rectangle Drawing var roundedRectanglePath = UIBezierPath.FromRoundedRect(new CGRect(8, 6, 109, 9), 4); context.SaveState(); roundedRectanglePath.AddClip(); context.DrawLinearGradient(glossyGradient, new CGPoint(62.5f, 6), new CGPoint(62.5f, 15), 0); context.RestoreState(); //// Text Drawing var textRect = new CGRect(18, 6, 90, 28); context.SaveState(); context.SetShadow(textShadowOffset, textShadowBlurRadius, textShadow); glossyColorUp.SetFill(); // Use default button-drawn text //new NSString(textContent).DrawString(textRect, font, UILineBreakMode.WordWrap, UITextAlignment.Center); context.RestoreState(); // ------------- END PAINTCODE ------------- } } }
public override void Draw(CGRect rect) { using (var context = UIGraphics.GetCurrentContext()) { var bounds = Bounds; //UIColor background = Enabled ? isPressed ? HighlightedColor : NormalColor : DisabledColor; UIColor buttonColor = NormalColor; //UIColor.FromRGBA (0.00f, 0.37f, 0.89f, 1.00f); var buttonColorRGBA = new nfloat[4]; buttonColor.GetRGBA( out buttonColorRGBA [0], out buttonColorRGBA [1], out buttonColorRGBA [2], out buttonColorRGBA [3] ); if (isPressed) { // Get the Hue Saturation Brightness Alpha copy of the color var buttonColorHSBA = new nfloat[4]; buttonColor.GetHSBA( out buttonColorHSBA [0], out buttonColorHSBA [1], out buttonColorHSBA [2], out buttonColorHSBA [3] ); // Change the brightness to a fixed value (0.5f) buttonColor = UIColor.FromHSBA(buttonColorHSBA [0], buttonColorHSBA [1], 0.5f, buttonColorHSBA [3]); // Re-set the base buttonColorRGBA because everything else is relative to it buttonColorRGBA = new nfloat[4]; buttonColor.GetRGBA( out buttonColorRGBA [0], out buttonColorRGBA [1], out buttonColorRGBA [2], out buttonColorRGBA [3] ); } using (var colorSpace = CGColorSpace.CreateDeviceRGB()) { // ------------- START PAINTCODE ------------- //// Color Declarations UIColor upColorOut = UIColor.FromRGBA(0.79f, 0.79f, 0.79f, 1.00f); UIColor bottomColorDown = UIColor.FromRGBA(0.21f, 0.21f, 0.21f, 1.00f); UIColor upColorInner = UIColor.FromRGBA(0.17f, 0.18f, 0.20f, 1.00f); UIColor bottomColorInner = UIColor.FromRGBA(0.98f, 0.98f, 0.99f, 1.00f); UIColor buttonFlareUpColor = UIColor.FromRGBA( (buttonColorRGBA [0] * 0.3f + 0.7f), (buttonColorRGBA [1] * 0.3f + 0.7f), (buttonColorRGBA [2] * 0.3f + 0.7f), (buttonColorRGBA [3] * 0.3f + 0.7f) ); UIColor buttonTopColor = UIColor.FromRGBA( (buttonColorRGBA [0] * 0.8f), (buttonColorRGBA [1] * 0.8f), (buttonColorRGBA [2] * 0.8f), (buttonColorRGBA [3] * 0.8f + 0.2f) ); UIColor buttonBottomColor = UIColor.FromRGBA( (buttonColorRGBA [0] * 0 + 1), (buttonColorRGBA [1] * 0 + 1), (buttonColorRGBA [2] * 0 + 1), (buttonColorRGBA [3] * 0 + 1) ); UIColor buttonFlareBottomColor = UIColor.FromRGBA( (buttonColorRGBA [0] * 0.8f + 0.2f), (buttonColorRGBA [1] * 0.8f + 0.2f), (buttonColorRGBA [2] * 0.8f + 0.2f), (buttonColorRGBA [3] * 0.8f + 0.2f) ); UIColor flareWhite = UIColor.FromRGBA(1.00f, 1.00f, 1.00f, 0.83f); //// Gradient Declarations var ringGradientColors = new CGColor [] { upColorOut.CGColor, bottomColorDown.CGColor }; var ringGradientLocations = new nfloat [] { 0, 1 }; var ringGradient = new CGGradient(colorSpace, ringGradientColors, ringGradientLocations); var ringInnerGradientColors = new CGColor [] { upColorInner.CGColor, bottomColorInner.CGColor }; var ringInnerGradientLocations = new nfloat [] { 0, 1 }; var ringInnerGradient = new CGGradient(colorSpace, ringInnerGradientColors, ringInnerGradientLocations); var buttonGradientColors = new CGColor [] { buttonBottomColor.CGColor, buttonTopColor.CGColor }; var buttonGradientLocations = new nfloat [] { 0, 1 }; var buttonGradient = new CGGradient(colorSpace, buttonGradientColors, buttonGradientLocations); var overlayGradientColors = new CGColor [] { flareWhite.CGColor, UIColor.Clear.CGColor }; var overlayGradientLocations = new nfloat [] { 0, 1 }; var overlayGradient = new CGGradient(colorSpace, overlayGradientColors, overlayGradientLocations); var buttonFlareGradientColors = new CGColor [] { buttonFlareUpColor.CGColor, buttonFlareBottomColor.CGColor }; var buttonFlareGradientLocations = new nfloat [] { 0, 1 }; var buttonFlareGradient = new CGGradient(colorSpace, buttonFlareGradientColors, buttonFlareGradientLocations); //// Shadow Declarations var buttonInnerShadow = UIColor.Black.CGColor; var buttonInnerShadowOffset = new CGSize(0, -0); var buttonInnerShadowBlurRadius = 5; var buttonOuterShadow = UIColor.Black.CGColor; var buttonOuterShadowOffset = new CGSize(0, 2); var buttonOuterShadowBlurRadius = isPressed ? 2 : 5; // ADDED this code after PaintCode //// outerOval Drawing var outerOvalPath = UIBezierPath.FromOval(new CGRect(5, 5, 63, 63)); context.SaveState(); context.SetShadow(buttonOuterShadowOffset, buttonOuterShadowBlurRadius, buttonOuterShadow); context.BeginTransparencyLayer(null); outerOvalPath.AddClip(); context.DrawLinearGradient(ringGradient, new CGPoint(36.5f, 5), new CGPoint(36.5f, 68), 0); context.EndTransparencyLayer(); context.RestoreState(); //// overlayOval Drawing var overlayOvalPath = UIBezierPath.FromOval(new CGRect(5, 5, 63, 63)); context.SaveState(); overlayOvalPath.AddClip(); context.DrawRadialGradient(overlayGradient, new CGPoint(36.5f, 12.23f), 17.75f, new CGPoint(36.5f, 36.5f), 44.61f, CGGradientDrawingOptions.DrawsBeforeStartLocation | CGGradientDrawingOptions.DrawsAfterEndLocation); context.RestoreState(); //// innerOval Drawing var innerOvalPath = UIBezierPath.FromOval(new CGRect(12, 12, 49, 49)); context.SaveState(); innerOvalPath.AddClip(); context.DrawLinearGradient(ringInnerGradient, new CGPoint(36.5f, 12), new CGPoint(36.5f, 61), 0); context.RestoreState(); //// buttonOval Drawing var buttonOvalPath = UIBezierPath.FromOval(new CGRect(14, 13, 46, 46)); context.SaveState(); buttonOvalPath.AddClip(); context.DrawRadialGradient(buttonGradient, new CGPoint(37, 63.23f), 2.44f, new CGPoint(37, 44.48f), 23.14f, CGGradientDrawingOptions.DrawsBeforeStartLocation | CGGradientDrawingOptions.DrawsAfterEndLocation); context.RestoreState(); ////// buttonOval Inner Shadow var buttonOvalBorderRect = buttonOvalPath.Bounds; buttonOvalBorderRect.Inflate(buttonInnerShadowBlurRadius, buttonInnerShadowBlurRadius); buttonOvalBorderRect.Offset(-buttonInnerShadowOffset.Width, -buttonInnerShadowOffset.Height); buttonOvalBorderRect = CGRect.Union(buttonOvalBorderRect, buttonOvalPath.Bounds); buttonOvalBorderRect.Inflate(1, 1); var buttonOvalNegativePath = UIBezierPath.FromRect(buttonOvalBorderRect); buttonOvalNegativePath.AppendPath(buttonOvalPath); buttonOvalNegativePath.UsesEvenOddFillRule = true; context.SaveState(); { var xOffset = buttonInnerShadowOffset.Width + (float)Math.Round(buttonOvalBorderRect.Width); var yOffset = buttonInnerShadowOffset.Height; context.SetShadow( new CGSize(xOffset + (xOffset >= 0 ? 0.1f : -0.1f), yOffset + (yOffset >= 0 ? 0.1f : -0.1f)), buttonInnerShadowBlurRadius, buttonInnerShadow); buttonOvalPath.AddClip(); var transform = CGAffineTransform.MakeTranslation(-(float)Math.Round(buttonOvalBorderRect.Width), 0); buttonOvalNegativePath.ApplyTransform(transform); UIColor.Gray.SetFill(); buttonOvalNegativePath.Fill(); } context.RestoreState(); //// flareOval Drawing var flareOvalPath = UIBezierPath.FromOval(new CGRect(22, 14, 29, 15)); context.SaveState(); flareOvalPath.AddClip(); context.DrawLinearGradient(buttonFlareGradient, new CGPoint(36.5f, 14), new CGPoint(36.5f, 29), 0); context.RestoreState(); // ------------- END PAINTCODE ------------- } } }
public override void PrepareLayout() { base.PrepareLayout(); // Get the number of sections var numberofSections = CollectionView.NumberOfSections(); if (numberofSections == 0) { return; } // Reset collections _headersAttributes.Clear(); _footersAttributes.Clear(); _unionRects.Clear(); _columnHeights.Clear(); _allItemAttributes.Clear(); _sectionItemAttributes.Clear(); // Initialize column heights for (int n = 0; n < ColumnCount; n++) { _columnHeights.Add((nfloat)0); } // Process all sections nfloat top = 0.0f; var attributes = new UICollectionViewLayoutAttributes(); var columnIndex = 0; for (nint section = 0; section < numberofSections; ++section) { // Calculate section specific metrics var minimumInterItemSpacing = (MinimumInterItemSpacingForSection == null) ? MinimumColumnSpacing : MinimumInterItemSpacingForSection(CollectionView, this, section); // Calculate widths var width = CollectionView.Bounds.Width - SectionInset.Left - SectionInset.Right; var itemWidth = (nfloat)Math.Floor((width - ((ColumnCount - 1) * MinimumColumnSpacing)) / ColumnCount); // Calculate section header var heightHeader = (HeightForHeader == null) ? HeaderHeight : HeightForHeader(CollectionView, this, section); if (heightHeader > 0) { attributes = UICollectionViewLayoutAttributes.CreateForSupplementaryView(UICollectionElementKindSection.Header, NSIndexPath.FromRowSection(0, section)); attributes.Frame = new CGRect(0, top, CollectionView.Bounds.Width, heightHeader); _headersAttributes.Add(section, attributes); _allItemAttributes.Add(attributes); top = attributes.Frame.GetMaxY(); } top += SectionInset.Top; for (int n = 0; n < ColumnCount; n++) { _columnHeights [n] = top; } // Calculate Section Items var itemCount = CollectionView.NumberOfItemsInSection(section); List <UICollectionViewLayoutAttributes> itemAttributes = new List <UICollectionViewLayoutAttributes> (); for (nint n = 0; n < itemCount; n++) { var indexPath = NSIndexPath.FromRowSection(n, section); columnIndex = NextColumnIndexForItem(n); var xOffset = SectionInset.Left + (itemWidth + MinimumColumnSpacing) * (nfloat)columnIndex; var yOffset = _columnHeights [columnIndex]; var itemSize = (SizeForItem == null) ? new CGSize(0, 0) : SizeForItem(CollectionView, this, indexPath); nfloat itemHeight = 0.0f; if (itemSize.Height > 0.0f && itemSize.Width > 0.0f) { itemHeight = (nfloat)Math.Floor(itemSize.Height * itemWidth / itemSize.Width); } attributes = UICollectionViewLayoutAttributes.CreateForCell(indexPath); attributes.Frame = new CGRect(xOffset, yOffset, itemWidth, itemHeight); itemAttributes.Add(attributes); _allItemAttributes.Add(attributes); _columnHeights [columnIndex] = attributes.Frame.GetMaxY() + MinimumInterItemSpacing; } _sectionItemAttributes.Add(itemAttributes); // Calculate Section Footer nfloat footerHeight = 0.0f; columnIndex = LongestColumnIndex(); top = _columnHeights [columnIndex] - MinimumInterItemSpacing + SectionInset.Bottom; footerHeight = (HeightForFooter == null) ? FooterHeight : HeightForFooter(CollectionView, this, section); if (footerHeight > 0) { attributes = UICollectionViewLayoutAttributes.CreateForSupplementaryView(UICollectionElementKindSection.Footer, NSIndexPath.FromRowSection(0, section)); attributes.Frame = new CGRect(0, top, CollectionView.Bounds.Width, footerHeight); _footersAttributes.Add(section, attributes); _allItemAttributes.Add(attributes); top = attributes.Frame.GetMaxY(); } for (int n = 0; n < ColumnCount; n++) { _columnHeights [n] = top; } } var i = 0; var attrs = _allItemAttributes.Count; while (i < attrs) { var rect1 = _allItemAttributes [i].Frame; i = (int)Math.Min(i + _unionSize, attrs) - 1; var rect2 = _allItemAttributes [i].Frame; _unionRects.Add(CGRect.Union(rect1, rect2)); i++; } }