2013-02-09 12 views
10

Il mio obiettivo per la mia app è che l'utente sia in grado di ordinare varie opzioni di pianificazione scorrendo verso sinistra e destra dello schermo di un iPhone. Come faccio a disegnare e rimuovere i rettangoli mentre l'utente ordina queste diverse opzioni di pianificazione?Rettangoli di disegno in iOS

Ho un file UIViewController.h, UIViewController.m e UIViewController.xib da manipolare. Ho bisogno di una classe UIView separata? In tal caso, come collego la classe di UIView alla vista nel mio file .xib?

+0

XCode è un'applicazione (un IDE). Non disegna nulla. Objective-C è il linguaggio di programmazione per iOS. Si consiglia di controllare le esercitazioni su questo sito - questo in particolare: http://www.raywenderlich.com/2033/core-graphics-101-lines-rectangles-and-gradients (anche se una seconda occhiata alla tua domanda sembra che abbia poco a che fare con il disegno. Forse vuoi 'UIScrollView') –

+0

Capisco che ho bisogno di scrivere il codice obiettivo-c ma stavo dicendo che sono in x-code come un quadro di riferimento. La mia comprensione è la UIScrollView determina solo se è possibile scorrere e quanto lontano è possibile scorrere. Se ho disegnato un rettangolo dallo schermo ma avevo UIScrollView che è stato definito come in grado di scorrere così lontano potrei eventualmente vederlo. Sulla base di queste premesse, ho solo bisogno di sapere come usare UIViewController e il suo file .xib per disegnare rettangoli a seconda dell'input dell'utente per determinare le coordinate. –

+0

Tutto ciò di cui ho bisogno è un metodo che accetta un input determinato dall'utente e traccia un rettangolo in base alle coordinate, all'altezza e alla larghezza definite dall'utente. –

risposta

23

Wow ... così tanti soluzione complicata, qui è quello che vi serve:

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

Nient'altro ... non c'è bisogno di impazzire in merito all'attuazione.

5

Prima creare una vista personalizzata.

#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 

si prova. link al tuo AppDelegate o 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

Un UIView accade per disegnare la forma di un rettangolo, quindi se tutto ciò che serve è quello di cambiare il colore del rettangolo, impostare la proprietà backgroundColor di l'UIView per il colore che vuoi che sia.

Un UIView vuota farà:

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

Se si sta facendo dal costruttore di interfaccia, trascinare una nuova vista dalla libreria sulla tela e impostare il colore di sfondo nelle proprietà della vista.

Probabilmente non è necessaria una visualizzazione personalizzata per il caso semplice. Puoi anche aggiungere altri elementi alla tua vista "rettangolo" come UILabels per la visualizzazione del testo.

+0

Questo è un suggerimento che ho visto prima ma il problema è che ho bisogno di essere in grado di posizionare un rettangolo di qualsiasi dimensione a qualsiasi coordinata sullo schermo mentre l'app è in esecuzione perché l'utente inserirà i valori delle coordinate e altezza e larghezza. –

+0

È possibile aggiornare dinamicamente il frame di qualsiasi vista in fase di esecuzione. Ma dovrai farlo in codice. Quando aggiorni la cornice cambierà la posizione e la dimensione del rettangolo. Può essere "letteralmente di qualsiasi dimensione" e "in qualsiasi coordinata" :) – Kekoa

+0

include le coordinate della vista? Anche questo deve essere in grado di avere un numero indefinito di rettangoli –

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

Puoi sempre fare semplicemente [UIBezierPath bezierPathWithRect: (CGRect) rect]; –

3

È possibile disegnare un rettangolo utilizzando questo:

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