実際に描画ルーチンを提供し、ベースを呼び出さずに、もちろんProgress
プロパティに基づいて図面を変更する必要があります。黄色の長方形のような単純な
何か:
public override void Draw(CGRect rect)
{
var color = UIColor.FromRGBA(1.0f, 1.0f, 0.0f, 1.000f);
var rectanglePath = UIBezierPath.FromRect(new CGRect(rect.X, rect.Y, rect.Width * Progress, rect.Height));
color.SetFill();
rectanglePath.Fill();
}
または赤の先のとがっのthingie™:あなたの助けを
public override void Draw(CGRect frame)
{
var context = UIGraphics.GetCurrentContext();
var color2 = UIColor.FromRGBA(0.199f, 0.018f, 0.018f, 1.000f);
var shadow = new NSShadow();
shadow.ShadowColor = UIColor.Black;
shadow.ShadowOffset = new CGSize(3.1f, 3.1f);
shadow.ShadowBlurRadius = 5.0f;
UIBezierPath bezierPath = new UIBezierPath();
bezierPath.MoveTo(new CGPoint(frame.GetMinX() + 0.00935f * frame.Width * Progress, frame.GetMinY() + 0.01351f * frame.Height));
bezierPath.AddLineTo(new CGPoint(frame.GetMinX() + 0.99537f * frame.Width * Progress, frame.GetMinY() + 0.50000f * frame.Height));
bezierPath.AddLineTo(new CGPoint(frame.GetMinX() + 0.99537f * frame.Width * Progress, frame.GetMinY() + 0.50000f * frame.Height));
bezierPath.AddLineTo(new CGPoint(frame.GetMinX() + 0.00935f * frame.Width * Progress, frame.GetMinY() + 0.98570f * frame.Height));
bezierPath.AddLineTo(new CGPoint(frame.GetMinX() + 0.00935f * frame.Width * Progress, frame.GetMinY() + 0.01351f * frame.Height));
bezierPath.ClosePath();
bezierPath.LineCapStyle = CGLineCap.Square;
bezierPath.LineJoinStyle = CGLineJoin.Bevel;
context.SaveState();
context.SetShadow(shadow.ShadowOffset, shadow.ShadowBlurRadius, shadow.ShadowColor.CGColor);
UIColor.Red.SetFill();
bezierPath.Fill();
context.RestoreState();
color2.SetStroke();
bezierPath.LineWidth = 1.0f;
bezierPath.Stroke();
}
おかげで、それは次のようになりますこれは私の問題に取り組む最善の方法ではありませんでした。私は標準の 'UIProgressView'の機能を失いたくないので、代わりに' UIView'から継承した独自のカスタムクラスを書いて、アプリケーションの現在の 'UIProgressView'の上に描画しました。あなたの詳細な答えは、drawメソッドがオーバーライドされたときに何が起こっているのかを理解する助けになりました。 – PantAaroN