using System; 
 | 
using System.Collections.Generic; 
 | 
using System.Linq; 
 | 
using System.Text; 
 | 
using UIKit; 
 | 
using Foundation; 
 | 
using Shared.IO; 
 | 
using CoreGraphics; 
 | 
  
 | 
namespace Shared 
 | 
{ 
 | 
    /// <summary> 
 | 
    /// 文本输入框 
 | 
    /// </summary> 
 | 
    public class TextView : View 
 | 
    { 
 | 
        /// <summary> 
 | 
        /// 文字大小 
 | 
        /// </summary> 
 | 
        /// <value>The size of the text.</value> 
 | 
        public float TextSize 
 | 
        { 
 | 
            get 
 | 
            { 
 | 
                return (float)uILable.TextSize.PointSize; 
 | 
            } 
 | 
            set 
 | 
            { 
 | 
                uILable.TextSize = UIFont.SystemFontOfSize(value); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        int textID; 
 | 
        /// <summary> 
 | 
        /// 根据ID获取对应的备注 
 | 
        /// </summary> 
 | 
        public int TextID 
 | 
        { 
 | 
            get 
 | 
            { 
 | 
                return textID; 
 | 
            } 
 | 
            set 
 | 
            { 
 | 
                textID = value; 
 | 
                Text = Language.StringByID(TextID); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        MyUILable uILable; 
 | 
        public TextView() 
 | 
        { 
 | 
            uiView = uILable = new MyUILable(this) { }; 
 | 
            
 | 
        } 
 | 
  
 | 
        string text = ""; 
 | 
        /// <summary> 
 | 
        /// 文本 
 | 
        /// </summary> 
 | 
        /// <value>文本</value> 
 | 
        public string Text 
 | 
        { 
 | 
            get 
 | 
            { 
 | 
                return text; 
 | 
            } 
 | 
            set 
 | 
            { 
 | 
                text = value; 
 | 
                if(!IsCanRefresh){ 
 | 
                    return; 
 | 
                } 
 | 
                uILable.Text = value; 
 | 
            } 
 | 
        } 
 | 
  
 | 
        /// <summary> 
 | 
        /// 文本颜色 
 | 
        /// </summary> 
 | 
        public uint TextColor 
 | 
        { 
 | 
            get 
 | 
            { 
 | 
                nfloat r, g, b, a; 
 | 
                uILable.TextColor.GetRGBA(out r, out g, out b, out a); 
 | 
                r *= 255; 
 | 
                g *= 255; 
 | 
                b *= 255; 
 | 
                a *= 255; 
 | 
                return (uint)(r * 256 * 256 * 256 + g * 256 * 256 + b * 256 + a); 
 | 
            } 
 | 
            set 
 | 
            { 
 | 
                byte r, g, b, a; 
 | 
                r = (byte)(value / 256 / 256 % 256); 
 | 
                g = (byte)(value / 256 % 256); 
 | 
                b = (byte)(value % 256); 
 | 
                a = (byte)(value / 256 / 256 / 256 % 256); 
 | 
                uILable.TextColor = UIKit.UIColor.FromRGBA(r, g, b, a); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        /// <summary> 
 | 
        /// 是否支持换行 
 | 
        /// </summary> 
 | 
        /// <value><c>true</c> if is more lines; otherwise, <c>false</c>.</value> 
 | 
        public bool IsMoreLines 
 | 
        { 
 | 
            get 
 | 
            { 
 | 
                return uILable.IsMoreLines; 
 | 
            } 
 | 
            set 
 | 
            { 
 | 
                uILable.IsMoreLines = value; 
 | 
            } 
 | 
        } 
 | 
  
 | 
     
 | 
        public override void Refresh() 
 | 
        { 
 | 
            base.Refresh(); 
 | 
            Text = Text; 
 | 
        } 
 | 
  
 | 
    } 
 | 
  
 | 
    class MyUILable : UILabel 
 | 
    { 
 | 
        [Weak] TextView textView; 
 | 
        public MyUILable(TextView textView) 
 | 
        { 
 | 
            this.textView = textView; 
 | 
            LineBreakMode = UILineBreakMode.MiddleTruncation; 
 | 
            TextAlignment = UITextAlignment.Center; 
 | 
        } 
 | 
  
 | 
        bool isMoreLines; 
 | 
        public bool IsMoreLines 
 | 
        { 
 | 
            get 
 | 
            { 
 | 
                return isMoreLines; 
 | 
            } 
 | 
            set 
 | 
            { 
 | 
                isMoreLines = value; 
 | 
                if (isMoreLines) 
 | 
                { 
 | 
                    Lines = 0; 
 | 
                } 
 | 
                else 
 | 
                { 
 | 
                    Lines = 1; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
  
 | 
        /// <summary> 
 | 
        /// 点击开始 
 | 
        /// </summary> 
 | 
        /// <param name="touches">Touches.</param> 
 | 
        /// <param name="evt">Evt.</param> 
 | 
        public override void TouchesBegan(NSSet touches, UIEvent evt) 
 | 
        { 
 | 
            textView?.TouchEvent(EventActions.Down, (touches.AnyObject as UITouch).LocationInView(this)); 
 | 
        } 
 | 
        /// <summary> 
 | 
        ///  移动 
 | 
        /// </summary> 
 | 
        /// <param name="touches">Touches.</param> 
 | 
        /// <param name="evt">Evt.</param> 
 | 
        public override void TouchesMoved(NSSet touches, UIEvent evt) 
 | 
        { 
 | 
            textView?.TouchEvent(EventActions.Move, (touches.AnyObject as UITouch).LocationInView(this)); 
 | 
        } 
 | 
  
 | 
        /// <summary> 
 | 
        /// 点击弹起 
 | 
        /// </summary> 
 | 
        /// <param name="touches">Touches.</param> 
 | 
        /// <param name="evt">Evt.</param> 
 | 
        public override void TouchesEnded(NSSet touches, UIEvent evt) 
 | 
        { 
 | 
            textView?.TouchEvent(EventActions.Up, (touches.AnyObject as UITouch).LocationInView(this)); 
 | 
        } 
 | 
  
 | 
        public override void TouchesCancelled(NSSet touches, UIEvent evt) 
 | 
        { 
 | 
            textView?.TouchEvent(EventActions.Cancel, (touches.AnyObject as UITouch).LocationInView(this)); 
 | 
        } 
 | 
  
 | 
  
 | 
        /// <summary> 
 | 
        /// 因为这个视图很奇怪,会自动加了两个UIImageView,所以这个特殊处理一下 
 | 
        /// </summary> 
 | 
        /// <param name="view">View.</param> 
 | 
        public override void AddSubview(UIView view) 
 | 
        { 
 | 
            if (view.GetType() == typeof(UIImageView) && view.Tag != int.MinValue) 
 | 
            { 
 | 
                return; 
 | 
            } 
 | 
            base.AddSubview(view); 
 | 
        } 
 | 
  
 | 
  
 | 
        /// <summary> 
 | 
        /// 文本 
 | 
        /// </summary> 
 | 
        /// <value>The text.</value> 
 | 
        public string Text 
 | 
        { 
 | 
            get 
 | 
            { 
 | 
                return base.Text; 
 | 
            } 
 | 
            set 
 | 
            { 
 | 
                base.Text = value; 
 | 
            } 
 | 
        } 
 | 
  
 | 
        /// <summary> 
 | 
        /// 文本的颜色 
 | 
        /// </summary> 
 | 
        /// <value>文本的颜色</value> 
 | 
        public UIColor TextColor 
 | 
        { 
 | 
            get 
 | 
            { 
 | 
                return base.TextColor; 
 | 
            } 
 | 
            set 
 | 
            { 
 | 
                base.TextColor = value; 
 | 
            } 
 | 
        } 
 | 
  
 | 
        /// <summary> 
 | 
        /// 文本的大小 
 | 
        /// </summary> 
 | 
        /// <value>文本的大小</value> 
 | 
        public UIFont TextSize 
 | 
        { 
 | 
            get 
 | 
            { 
 | 
                return base.Font; 
 | 
            } 
 | 
            set 
 | 
            { 
 | 
                base.Font = value; 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    //class MyUILable : UIScrollView 
 | 
    //{ 
 | 
 //       View view;  
 | 
    //    public MyUILable(View view) 
 | 
    //    { 
 | 
    //        this.view = view; 
 | 
    //        commonInit(); 
 | 
    //    } 
 | 
  
 | 
    //    /// <summary> 
 | 
    //    /// 点击开始 
 | 
    //    /// </summary> 
 | 
    //    /// <param name="touches">Touches.</param> 
 | 
    //    /// <param name="evt">Evt.</param> 
 | 
    //    public override void TouchesBegan(NSSet touches, UIEvent evt) 
 | 
    //    { 
 | 
    //        //base.TouchesBegan(touches, evt); 
 | 
    //        view.TouchEvent(EventActions.Down, (touches.AnyObject as UITouch).LocationInView(this)); 
 | 
    //    } 
 | 
    //    /// <summary> 
 | 
    //    ///  移动 
 | 
    //    /// </summary> 
 | 
    //    /// <param name="touches">Touches.</param> 
 | 
    //    /// <param name="evt">Evt.</param> 
 | 
    //    public override void TouchesMoved(NSSet touches, UIEvent evt) 
 | 
    //    { 
 | 
    //        //base.TouchesMoved(touches, evt); 
 | 
    //        view.TouchEvent(EventActions.Move, (touches.AnyObject as UITouch).LocationInView(this)); 
 | 
    //    } 
 | 
  
 | 
  
 | 
  
 | 
    //    /// <summary> 
 | 
    //    /// 点击弹起 
 | 
    //    /// </summary> 
 | 
    //    /// <param name="touches">Touches.</param> 
 | 
    //    /// <param name="evt">Evt.</param> 
 | 
    //    public override void TouchesEnded(NSSet touches, UIEvent evt) 
 | 
    //    { 
 | 
    //        //base.TouchesEnded(touches, evt); 
 | 
    //        view.TouchEvent(EventActions.Up, (touches.AnyObject as UITouch).LocationInView(this)); 
 | 
    //    } 
 | 
         
 | 
  
 | 
    //    /// <summary> 
 | 
    //    /// 因为这个视图很奇怪,会自动加了两个UIImageView,所以这个特殊处理一下 
 | 
    //    /// </summary> 
 | 
    //    /// <param name="view">View.</param> 
 | 
    //    public override void AddSubview(UIView view) 
 | 
    //    { 
 | 
    //        if (view.GetType() == typeof(UIImageView) && view.Tag != int.MinValue) 
 | 
    //        { 
 | 
    //            return; 
 | 
    //        } 
 | 
    //        base.AddSubview(view); 
 | 
    //    } 
 | 
  
 | 
    //    UILabel[] labels = new UILabel[2]; 
 | 
    //    float scrollSpeed = 30; 
 | 
    //    float bufferSpaceBetweenLabels = 20; 
 | 
    //    void commonInit() 
 | 
    //    { 
 | 
    //        for (int i = 0; i < labels.Length; ++i) 
 | 
    //        { 
 | 
 //               labels[i] = new UILabel(); 
 | 
    //            labels[i].TextColor = UIColor.White; 
 | 
    //            labels[i].BackgroundColor = UIColor.Clear; 
 | 
 //               labels[i].Text = " "; 
 | 
    //            AddSubview(labels[i]); 
 | 
    //        } 
 | 
    //        ShowsVerticalScrollIndicator = false; 
 | 
    //        ShowsHorizontalScrollIndicator = false; 
 | 
    //        UserInteractionEnabled = false; 
 | 
    //    } 
 | 
  
 | 
  
 | 
    //    void scroll() 
 | 
    //    { 
 | 
    //        ContentOffset = new CGPoint(0, 0); 
 | 
    //        AnimateNotify( 
 | 
    //            labels[0].Frame.Size.Width / scrollSpeed, 
 | 
    //            0f, 
 | 
    //            UIViewAnimationOptions.CurveLinear, () => 
 | 
    //            { 
 | 
    //                ContentOffset = new CGPoint(labels[0].Frame.Width + bufferSpaceBetweenLabels, 0); 
 | 
    //            }, 
 | 
    //            finished => 
 | 
    //            { 
 | 
    //                if (finished) 
 | 
    //                    scroll(); 
 | 
    //            } 
 | 
    //        ); 
 | 
    //    } 
 | 
  
 | 
    //    void readjustLabels() 
 | 
    //    { 
 | 
    //        Layer.RemoveAllAnimations(); 
 | 
    //        float offset = 0.0f; 
 | 
    //        for (int i = 0; i < labels.Length; ++i) 
 | 
    //        { 
 | 
    //            labels[i].SizeToFit(); 
 | 
    //            CGPoint center; 
 | 
    //            center = labels[i].Center; 
 | 
    //            center.Y = Center.Y - Frame.Y; 
 | 
    //            labels[i].Center = center; 
 | 
  
 | 
    //            CGRect frame; 
 | 
    //            frame = labels[i].Frame; 
 | 
    //            frame.X = offset; 
 | 
    //            labels[i].Frame = frame; 
 | 
  
 | 
    //            offset += (float)labels[i].Frame.Width + bufferSpaceBetweenLabels; 
 | 
    //        } 
 | 
  
 | 
    //        var size = new CGSize 
 | 
    //        { 
 | 
    //            Width = labels[0].Frame.Width + Frame.Width + bufferSpaceBetweenLabels, 
 | 
    //            Height = Frame.Height 
 | 
    //        }; 
 | 
    //        ContentSize = size; 
 | 
  
 | 
    //        SetContentOffset(new CGPoint(0, 0), false); 
 | 
  
 | 
    //        if (labels[0].Frame.Width > Frame.Width) 
 | 
    //        { 
 | 
    //            for (int i = 1; i < labels.Length; ++i) 
 | 
    //            { 
 | 
    //                labels[i].Hidden = false; 
 | 
    //            } 
 | 
    //            scroll(); 
 | 
    //        } 
 | 
    //        else 
 | 
    //        { 
 | 
    //            for (int i = 1; i < labels.Length; ++i) 
 | 
    //            { 
 | 
    //                labels[i].Hidden = true; 
 | 
    //            } 
 | 
    //            CGPoint center; 
 | 
    //            center = labels[0].Center; 
 | 
    //            center.X = Center.X - Frame.X; 
 | 
    //            labels[0].Center = center; 
 | 
    //        } 
 | 
    //    } 
 | 
  
 | 
    //    /// <summary> 
 | 
    //    /// 文本 
 | 
    //    /// </summary> 
 | 
    //    /// <value>The text.</value> 
 | 
    //    public string Text 
 | 
    //    { 
 | 
    //        get 
 | 
    //        { 
 | 
    //            return labels[0].Text; 
 | 
    //        } 
 | 
    //        set 
 | 
    //        { 
 | 
    //            if (labels[0].Text == value) 
 | 
    //            { 
 | 
    //                return; 
 | 
    //            } 
 | 
    //            for (int i = 0; i < labels.Length; ++i) 
 | 
    //            { 
 | 
    //                labels[i].Text = value; 
 | 
    //            } 
 | 
  
 | 
    //            readjustLabels(); 
 | 
    //        } 
 | 
    //    } 
 | 
  
 | 
    //    /// <summary> 
 | 
    //    /// 文本的颜色 
 | 
    //    /// </summary> 
 | 
    //    /// <value>文本的颜色</value> 
 | 
    //    public UIColor TextColor 
 | 
    //    { 
 | 
    //        get 
 | 
    //        { 
 | 
    //            return labels[0].TextColor; 
 | 
    //        } 
 | 
    //        set 
 | 
    //        { 
 | 
    //            for (int i = 0; i < labels.Length; ++i) 
 | 
    //            { 
 | 
    //                labels[i].TextColor = value; 
 | 
    //            } 
 | 
    //        } 
 | 
    //    } 
 | 
  
 | 
    //    /// <summary> 
 | 
    //    /// 文本的大小 
 | 
    //    /// </summary> 
 | 
    //    /// <value>文本的大小</value> 
 | 
    //    public UIFont TextSize 
 | 
    //    { 
 | 
    //        get 
 | 
    //        { 
 | 
    //            return labels[0].Font; 
 | 
    //        } 
 | 
    //        set 
 | 
    //        { 
 | 
    //            for (int i = 0; i < labels.Length; ++i) 
 | 
    //            { 
 | 
    //                labels[i].Font = value; 
 | 
    //            } 
 | 
    //        } 
 | 
    //    } 
 | 
    //} 
 | 
} 
 |