2013-02-09 10 views
10

Mein Ziel für meine App ist es, dass der Benutzer verschiedene Optionen für die Planung auswählen kann, indem er nach links und rechts von einem iPhone-Bildschirm streicht. Wie würde ich Rechtecke zeichnen und entfernen, wenn der Benutzer diese verschiedenen Planungsoptionen durchsucht?Rectangles in iOS zeichnen

Ich habe eine UIViewController.h, UIViewController.m und UIViewController.xib Dateien zu manipulieren. Benötige ich eine separate UIView-Klasse? Wenn ja, wie verbinde ich diese UIView-Klasse mit der Ansicht in meiner .xib-Datei?

+0

XCode ist eine Anwendung (ein IDE). Es zeichnet nichts. Objective-C ist die Programmiersprache für iOS. Vielleicht möchten Sie die Tutorials auf dieser Website - diese insbesondere: http://www.raywenderlich.com/2033/core-graphics-101-lines-rectangles-and-gradients (obwohl ein zweiter Blick auf Ihre Frage scheint mit dem Zeichnen wenig zu tun Vielleicht wollen Sie 'UIScrollView') –

+0

Ich verstehe, ich muss den Ziel-c-Code schreiben, aber ich sagte, ich bin in x-Code als Referenzrahmen. Mein Verständnis ist das UIScrollView ermittelt nur, ob Sie scrollen können und wie weit Sie scrollen können. Wenn ich ein Rechteck vom Bildschirm zeichnete, aber UIScrollView hatte, das so weit scrollen konnte, konnte ich es schließlich sehen. Basierend auf dieser Voraussetzung muss ich nur wissen, wie UIViewController und seine .xib-Datei verwendet werden, um Rechtecke abhängig von Benutzereingaben zu zeichnen, um Koordinaten zu bestimmen. –

+0

Alles, was ich brauche, ist eine Methode, die eine vom Benutzer bestimmte Eingabe nimmt und ein Rechteck basierend auf den Koordinaten, der Höhe und der Breite zeichnet, die der Benutzer definiert. –

Antwort

23

Wow ... so viele komplizierte Lösung, hier ist das, was Sie brauchen:

UIView *myBox = [[UIView alloc] initWithFrame:CGRectMake(180, 35, 10, 10)]; 
myBox.backgroundColor = [UIColor lightGrayColor]; 
[self.view addSubview:myBox]; 

Nichts anderes ... brauchen nicht über die Umsetzung verrückt zu gehen.

5

Zuerst eine CustomView erstellen.

#import <UIKit/UIKit.h> 

@interface MyView : UIView 

@end 

#import "MyView.h" 

@implementation MyView 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 


// Only override drawRect: if you perform custom drawing. 
// An empty implementation adversely affects performance during animation. 
- (void)drawRect:(CGRect)rect 
{ 
    // Drawing Rect 
    [[UIColor redColor] setFill];              // red 
    UIRectFill(CGRectInset(self.bounds, 100, 100)); 
} 


@end 

Sie Test. Link an AppDelegate oder Viewcontroller

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{  
    MyView* view = [[MyView alloc]initWithFrame:CGRectMake(10, 30, 300, 400)]; 
    view.backgroundColor = [UIColor blackColor]; 
    [window addSubview:view]; 

    [self.window makeKeyAndVisible]; 

    return YES; 
} 

- (void)viewDidLoad 
{ 
    MyView* view = [[MyView alloc]initWithFrame:CGRectMake(10, 30, 300, 400)]; 
    view.backgroundColor = [UIColor blackColor]; 
    [self.view addSubview:view]; 

    [super viewDidLoad]; 
} 
3

A UIView in der Form eines Rechtecks ​​zu zeichnen geschieht, also, wenn alles, was Sie brauchen, ist die Farbe des Rechtecks ​​zu ändern, setzen Sie die backgroundColor Eigenschaft das UIView zu der Farbe, die Sie es wünschen.

Eine leere UIView tun:

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(x, y, width, height)]; 
view.backgroundColor = [UIColor redColor]; 

Wenn Sie es von Interface Builder, ziehen Sie einen neuen Blick aus der Bibliothek auf die Leinwand und die Hintergrundfarbe in den Eigenschaften der Ansicht tun.

Sie brauchen wahrscheinlich keine benutzerdefinierte Ansicht für den einfachen Fall. Sie können Ihrer "Rechteck" -Ansicht auch weitere Elemente hinzufügen, z. B. UILabels, um Text anzuzeigen.

+0

Dies ist ein Vorschlag, den ich schon einmal gesehen habe, aber das Problem ist, dass ich ein Rechteck von buchstäblich jeder Größe an jeder Koordinate auf dem Bildschirm platzieren kann, während die App läuft, weil der Benutzer die Werte der Koordinaten und der Höhe und Breite. –

+0

Sie können den Frame einer beliebigen Ansicht zur Laufzeit dynamisch aktualisieren. Aber Sie müssen das im Code tun. Wenn Sie den Rahmen aktualisieren, ändert sich die Position und Größe des Rechtecks. Es kann "buchstäblich jede Größe" und "an jeder Koordinate" sein :) – Kekoa

+0

enthält das die Koordinaten der Ansicht? Dies muss auch eine undefinierte Anzahl von Rechtecken haben können. –

11
// 1st Add QuartzCore.framework to your project's "Link Binary with Libraries". 

// 2nd Import the header in your .m file (of targeted view controller): 

#import <QuartzCore/QuartzCore.h> 

// 3rd Inside - (void)viewDidLoad method: 
// Create a UIBezierPath (replace the coordinates with whatever you want): 
UIBezierPath *path = [UIBezierPath bezierPath]; 
[path moveToPoint:CGPointMake(10.0, 10.0)]; 
// # Entry Point with 10px white frame 
[path moveToPoint:CGPointMake(10.0, 10.0)]; 
// # Keeping 10px frame with iPhone's 450 on y-axis 
[path addLineToPoint:CGPointMake(10.0, 450.0)]; 
// # Substracting 10px for frame on x-axis, and moving 450 in y-axis 
[path addLineToPoint:CGPointMake(310.0, 450.0)]; 
// # Moving up to 1st step 10px line, 310px on the x-axis 
[path addLineToPoint:CGPointMake(310.0, 10.0)]; 
// # Back to entry point 
[path addLineToPoint:CGPointMake(10.0, 10.0)]; 

// 4th Create a CAShapeLayer that uses that UIBezierPath: 
CAShapeLayer *shapeLayer = [CAShapeLayer layer]; 
shapeLayer.path = [path CGPath]; 
shapeLayer.strokeColor = [[UIColor blueColor] CGColor]; 
shapeLayer.lineWidth = 3.0; 
shapeLayer.fillColor = [[UIColor clearColor] CGColor]; 
Add that CAShapeLayer to your view's layer: 

// 5th add shapeLayer as sublayer inside layer view 
[self.view.layer addSublayer:shapeLayer]; 
+4

Du könntest immer einfach [UIBezierPath bezierPathWithRect: (CGRect) rect]; –

3

Sie können ein Rechteck zeichnen dies durch die Verwendung:

UIBezierPath* rectanglePath = [UIBezierPath bezierPathWithRect: CGRectMake(68, 38, 81, 40)]; 
[UIColor.grayColor setFill]; 
[rectanglePath fill];