Я пытаюсь узнать больше о MonoTouch и поэтому попробовал рисовать с помощью Quartz2D. Я хочу создать пример, где я программно рисую n-прямоугольники. Проблема в том, что нарисован только первый. Я думаю, что второй удаляется/очищается/покрывается первым.Программно рисуем прямоугольники с помощью MonoTouch
Вот мой код:
SingleViewMTViewController.cs
public override void ViewDidLoad()
{
base.ViewDidLoad();
PointF locationOne = new PointF (5, 5);
PointF locationTwo = new PointF (5, 100);
SizeF size = new SizeF (120, 40);
DraggableRectangle tView = new DraggableRectangle (locationOne, size, UIColor.Yellow);
DraggableRectangle tView2 = new DraggableRectangle (locationTwo, size, UIColor.Brown);
DraggableRectangle[] views = new DraggableRectangle[2];
views [0] = tView;
views [1] = tView2;
View.AddSubviews (views);
}
DraggableRectangle.cs
public class DraggableRectangle : UIView
{
private CGPath path;
private PointF _targetLocation;
private SizeF _size;
private UIColor _fillColor = UIColor.Brown;
public DraggableRectangle (PointF targetLocation, SizeF size)
{
_targetLocation = targetLocation;
_size = size;
RectangleF frameRect = new RectangleF (_targetLocation.X, _targetLocation.Y, _size.Width, _size.Height);
this.Frame = frameRect;
this.BackgroundColor = UIColor.Clear; //without this, nothing is drawn
}
public DraggableRectangle (PointF targetLocation, SizeF size, UIColor fillColor):this(targetLocation,size)
{
_fillColor = fillColor;
}
public override void Draw (RectangleF rect)
{
//base.Draw (rect);
//works without base-call?
//get graphics context
using (CGContext gctx = UIGraphics.GetCurrentContext()) {
//set up drawing attributes
_fillColor.SetFill();
//create geometry
path = new CGPath();
path.AddRect (new RectangleF (_targetLocation.X, _targetLocation.Y, _size.Width, _size.Height));
path.CloseSubpath();
//add geometry to graphics context and draw it
gctx.AddPath (path);
gctx.DrawPath (CGPathDrawingMode.FillStroke);
}
}
Есть ли лучший способ сделать самостоятельные прямоугольники с MonoTouch? Или может кто-нибудь объяснить, что я делаю неправильно?
Заранее благодарен!
ОБНОВЛЕНИЕ: То к чему. лучший выход я могу достичь, но вот только не исправить для «Yellow» и «Браун» http://www.bilder-upload.eu/show.php?file=81bfea-1329755225.png http://www.bilder-upload.eu/show.php?file=81bfea-1329755225.png
Звучит интересно, не могли бы вы дать мне пример-кода? Достаточно того, чтобы я знал, где я должен что-то изменить. Поскольку я не уверен на 100%, я понял, что вы имели в виду. Особенно, почему это делается ниже рамки? – basti
Вау - это было быстро :) Большое спасибо. Еще один вопрос: на что зависит FrameSize? Итак, каково ваше «что-то» в вашем примере кода? – basti
Только что отредактировал мой ответ, дайте мне знать! –