Guest User

Untitled

a guest
Jan 31st, 2019
797
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.22 KB | None | 0 0
  1. /* Commented code above each section is code (Swift) that the derived code is converted from */
  2.  
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7.  
  8. using Foundation;
  9. using UIKit;
  10.  
  11. namespace XamarinFormsApp1.Extensions
  12. {
  13. public class AlertController : UIAlertController
  14. {
  15. private string originalTitle;
  16. private string spaceAdjustedTitle;
  17. private UIImageView imageView = null;
  18. private CoreGraphics.CGSize previousImgViewSize = CoreGraphics.CGSize.Empty;
  19. public override UIAlertControllerStyle PreferredStyle
  20. {
  21. get
  22. {
  23. return UIAlertControllerStyle.Alert;
  24. }
  25. }
  26.  
  27.  
  28. public override string Title
  29. {
  30. //didSet
  31. //{
  32. // // Keep track of original title
  33. // if title != spaceAdjustedTitle {
  34. // originalTitle = title
  35. // }
  36. //}
  37. get
  38. {
  39. return originalTitle;
  40. }
  41. set
  42. {
  43. if (Title != spaceAdjustedTitle ||
  44. string.IsNullOrEmpty(Title) || string.IsNullOrEmpty(spaceAdjustedTitle))
  45. {
  46. originalTitle = value;
  47. }
  48. }
  49. }
  50.  
  51. public void setTitleImage(UIImage image)
  52. {
  53. //guard let imageView = self.imageView else {
  54. // let imageView = UIImageView(image: image)
  55. //self.view.addSubview(imageView)
  56. //self.imageView = imageView
  57. //return
  58. //}
  59. //imageView.image = image
  60.  
  61. if (this.imageView == null)
  62. {
  63. UIImageView imageView = new UIImageView(image);
  64. this.View.AddSubview(imageView);
  65. this.imageView = imageView;
  66. return;
  67. }
  68. imageView.Image = image;
  69. }
  70.  
  71. public override void ViewDidLayoutSubviews()
  72. {
  73. //guard let imageView = imageView else {
  74. // super.viewDidLayoutSubviews()
  75. // return
  76. //}
  77. // // Adjust title if image size has changed
  78. // if previousImgViewSize != imageView.bounds.size {
  79. // previousImgViewSize = imageView.bounds.size
  80. // adjustTitle(for: imageView)
  81. //}
  82. // // Position `imageView`
  83. // let linesCount = newLinesCount(for: imageView)
  84. // let padding = Constants.padding(for: preferredStyle)
  85. // imageView.center.x = view.bounds.width / 2.0
  86. // imageView.center.y = padding + linesCount * lineHeight / 2.0
  87. //super.viewDidLayoutSubviews()
  88.  
  89. if (imageView == null)
  90. {
  91. base.ViewDidLayoutSubviews();
  92. return;
  93. }
  94. // Adjust title if image size has changed
  95. if (previousImgViewSize != imageView.Bounds.Size)
  96. {
  97. previousImgViewSize = imageView.Bounds.Size;
  98. adjustTitle(imageView);
  99. }
  100. // Position `imageView`
  101. var linesCount = newLinesCount(imageView);
  102. var padding = Constants.Padding(PreferredStyle);
  103. var x = View.Bounds.Width / 2.0;
  104. var y = padding + linesCount * lineHeight / 2.0;
  105. CoreGraphics.CGPoint cgPoint = imageView.Center;
  106. cgPoint.X = (nfloat)x;
  107. cgPoint.Y = (nfloat)y;
  108. imageView.Center = cgPoint;
  109. base.ViewDidLayoutSubviews();
  110. }
  111.  
  112. ///// Adds appropriate number of "\n" to `title` text to make space for `imageView`
  113. //private func adjustTitle(for imageView: UIImageView)
  114. //{
  115. // let linesCount = Int(newLinesCount(for: imageView))
  116. // let lines = (0..< linesCount).map({ _ in "\n" }).reduce("", +)
  117. // spaceAdjustedTitle = lines + (originalTitle ?? "")
  118. // title = spaceAdjustedTitle
  119. //}
  120. private void adjustTitle(UIImageView imageView)
  121. {
  122. var linesCount = (int)newLinesCount(imageView);
  123. var lines = Enumerable
  124. .Range(1, linesCount)
  125. .Select(i => "\n")
  126. .Aggregate((c, n) => $"{c}{n}");
  127. spaceAdjustedTitle = lines + (originalTitle ?? "");
  128. Title = spaceAdjustedTitle;
  129. }
  130.  
  131.  
  132. ///// - Return: Number new line chars needed to make enough space for `imageView`
  133. //private func newLinesCount(for imageView: UIImageView) -> CGFloat {
  134. // return ceil(imageView.bounds.height / lineHeight)
  135. //}
  136. private double newLinesCount(UIImageView imageView)
  137. {
  138. return Math.Ceiling(imageView.Bounds.Height / lineHeight);
  139. }
  140.  
  141. /// Calculated based on system font line height
  142. //private lazy var lineHeight: CGFloat = {
  143. // let style: UIFontTextStyle = self.preferredStyle == .alert ? .headline : .callout
  144. // return UIFont.preferredFont(forTextStyle: style).pointSize
  145. //}()
  146. private float lineHeight {
  147. get
  148. {
  149. UIFontTextStyle style = this.PreferredStyle == UIAlertControllerStyle.Alert ? UIFontTextStyle.Headline : UIFontTextStyle.Callout;
  150. return (float)UIFont.GetPreferredFontForTextStyle(style).PointSize;
  151. }
  152. }
  153.  
  154. //struct Constants {
  155. // static var paddingAlert: CGFloat = 22
  156. // static var paddingSheet: CGFloat = 11
  157. // static func padding(for style: UIAlertControllerStyle) -> CGFloat {
  158. // return style == .alert ? Constants.paddingAlert : Constants.paddingSheet
  159. // }
  160. //}
  161. struct Constants
  162. {
  163. static float paddingAlert = 22;
  164. static float paddingSheet = 11;
  165. public static float Padding(UIAlertControllerStyle style)
  166. {
  167. return style == UIAlertControllerStyle.Alert ? Constants.paddingAlert : Constants.paddingSheet;
  168. }
  169. }
  170.  
  171. }
  172. }
Advertisement
Add Comment
Please, Sign In to add comment