Bonjour à tous,

Je suis actuellement en train de développer une application permettant d'afficher des points aléatoires dans une vue personnalisé de type UIView.

Le principe général est le suivant :

1. L'utilisateur saisit un nombre de point dans un champ de type UITextField
2. Puis, il clique sur un bouton qui va lancer le random sur tous ces points et afficher aléatoirement dans la vue

Le problème est que les points ne s'affichent pas dans la vue. Pourtant j'utilise bien la méthode [self setNeedDisplay].

Voici ce qui a été fait pour le moment :

ViewController.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#import <UIKit/UIKit.h>
#import "maVue.h"

@interface ViewController : UIViewController{
    IBOutlet UITextField *piValue;
    IBOutlet UILabel *piResult;
    
    IBOutlet maVue *contentView;
    int contentViewWidth;
    int contentViewHeight;
    
}

- (IBAction)calculPI:(id)sender;

@end
ViewController.m
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (id) initWithCoder:(NSCoder *)aDecoder {
    NSLog(@"initWithCoder");
    self = [super initWithCoder:aDecoder];
    if (self) {

    }
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (float)generateRandomNumberBetweenMin:(int)min Max:(int)max{
    return (float) ((arc4random() % (max-min+1)) + min);
}

- (IBAction)calculPI:(id)sender {
    CGRect viewBounds = [contentView bounds];
    contentViewWidth = (int) viewBounds.size.width;
    contentViewHeight = (int) viewBounds.size.height;
    
    float ptsNumber = [piValue.text floatValue];
    float ptsInTheCircle = 0;
    float randX = 0;
    float randY = 0;
    CGPoint point;
    
    for(int i=0; i<ptsNumber; i++){
        randX = [self generateRandomNumberBetweenMin:0 Max:contentViewWidth];
        randY = [self generateRandomNumberBetweenMin:0 Max:contentViewHeight];
    
        point.x = randX;
        point.y = randY;
        
        NSValue *ptsValueStore = [NSValue valueWithCGPoint:point];

        [contentView addPoint:ptsValueStore];
        
        printf("view bounds %d + %d\n", contentViewWidth, contentViewHeight);
        printf("%f + %f\n", point.x, point.y);
    }
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.view endEditing:YES];
}

@end
maVue.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
#import <UIKit/UIKit.h>

@interface maVue : UIView
    @property (nonatomic, strong) NSMutableArray *pts;
    -(void) addPoint:(NSValue *)point;
@end
maVue.m
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

#import "maVue.h"

@implementation maVue
    @synthesize pts;

// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGRect bounds = [self bounds];
    
    //Initialisation du centre du repère
    CGPoint center;
    center.x = bounds.origin.x;
    center.y = bounds.origin.y;

    //Initialisation du rayon + traçé de l'arc
    float maxRadius = bounds.size.width;
    CGContextSetLineWidth(ctx, 1);
    CGContextSetRGBStrokeColor(ctx, 1.0, 0, 0, 1.0);
    CGContextAddArc(ctx, center.x, center.y, maxRadius, 0.0, 2 * M_PI, YES);
    CGContextStrokePath(ctx);
    
    printf("my view bounds : %f\n", maxRadius);
    printf("nbpoint : %d\n",(int) [self.pts count]);
    
    CGPoint pt;
    for(NSValue *valuePt in self.pts){
        pt = [valuePt CGPointValue];
        
        //Ajout des points sur le cercle
        CGRect borderRect = CGRectMake(pt.x, pt.y, 1.0, 1.0);
        CGContextRef context = UIGraphicsGetCurrentContext();
        CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1.0);
        CGContextFillEllipseInRect (context, borderRect);
        CGContextFillPath(context);
    }
}

-(void) addPoint:(NSValue *)point {
    [self.pts addObject:point];
     printf("Add nbpoint : %D\n",(int) [self.pts count]);
    [self setNeedsDisplay];
}

@end
Merci de votre aide