2015-07-04 3 views
2

Что было бы лучшим способом в iOS добиться рисования сетки из кругов с фиксированными столбцами и строками? Я хотел бы идентифицировать каждый круг, когда пользователь нажимает на него. Я попытался использовать представления коллекции, но кажется, что CoreGraphics предназначен для таких задач. enter image description hereРисование сетки кругов

+0

Объектив-c или скорость? –

+0

object-c please – Jani

+0

Создавайте круглые кнопки программно и присваивайте им «тег», чтобы определить, когда вы нажимаете на него. – VRAwesome

ответ

2

Вы можете создавать кнопки динамически следующим образом:

- (void)drawSheet 
{ 
    int numberOfRow=5; 
    int numberOfColumn=4; 
    float x = 1, 
      y = 20, 
      padding = 5, 
      width = (self.view.frame.size.width-(padding*(numberOfColumn-1)))/numberOfColumn, 
      height = (self.view.frame.size.height-(padding*(numberOfRow-1)))/numberOfRow; 
    int counter = 0; 
    for (int i=0; i<numberOfRow; i++) { 
     for (int j=0; j<numberOfColumn; j++) { 
      UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(x, y, 74, 74)]; 
      btn.layer.cornerRadius = btn.frame.size.width/2; 
      btn.layer.borderColor = [UIColor grayColor].CGColor; 
      btn.layer.borderWidth = 2.0; 
      [btn addTarget:self action:@selector(buttonPress:) forControlEvents:UIControlEventTouchUpInside]; 
      btn.clipsToBounds = YES; 
      btn.tag = counter; 
      [self.view addSubview:btn]; 
      x = x + width + padding; 
      counter = counter + 1; 
     } 
     x = 0; 
     y = y + height + padding; 
    } 
} 

При нажатии на нее, вы получите тег этого:

- (IBAction)buttonPress:(UIButton *)sender{ 
    NSLog(@"%ld",sender.tag); 
} 

enter image description here

+0

Большое спасибо – Jani

+0

@Jani Добро пожаловать в любое время :) –

1

привет Пожалуйста, проверьте приведенный ниже код. Я добавил 3 круга подряд, вы можете использовать больше, если хотите.

- (void)viewDidLoad { 
     [super viewDidLoad]; 
     UIView *circleView; 
     int x = 10; 
     int y = 20; 
     static int tagNum = 0; 
     for (int row=0; row < 5;) { 
      for (int cirNum =0 ; cirNum <3;) { 

       circleView = [[UIView alloc] initWithFrame:CGRectMake(x,y,100,100)]; 
       circleView.alpha = 0.5; 
       circleView.layer.cornerRadius = 50; 
       circleView.backgroundColor = [UIColor blueColor]; 
       circleView.tag = tagNum; 
       NSLog(@"tagNum is %d", tagNum); 
       [self.view addSubview:circleView]; 

       cirNum ++; 
       x = x + 100; 
       tagNum ++; 
       //y = y + 20; 

      } 
      row++; 
      y = y + 100; 
      x = 10; 
     } 
     // Do any additional setup after loading the view, typically from a nib. 
    } 


    -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    CGPoint location = [[touches anyObject] locationInView:self.view]; 
    CGRect fingerRect = CGRectMake(location.x-5, location.y-5, 10, 10); 

    for(UIView *view in self.view.subviews){ 
     CGRect subviewFrame = view.frame; 

     if(CGRectIntersectsRect(fingerRect, subviewFrame)){ 
      //we found the finally touched view 
      //NSLog(@"Yeah !, i found it %@",view); 
      NSLog(@"view tag touched is %ld",view.tag); 

     } 

    } 

} 

выход будет выглядеть следующим образом

simulator image

Смежные вопросы