2015-10-01 7 views
1

Привет мне нужно сделать много сложных объектов, как в образе enter image description hereрисовать много объектов с NSBezierPath

я нарисовать квадрат и точка в ней с этим кодом:

CGFloat mmForSqure = self.frame.size.height/6; 
UIBezierPath *path = [UIBezierPath bezierPathWithRect:CGRectMake(originX, originY, mmForSqure, mmForSqure)]; 
CGFloat originPoint = mmForSqure/4; 
for (int i = 1; i<4; i++) { 
    for (int j = 1; j<4; j++) { 
     CGPoint pathPoint = CGPointMake(i*originPoint+originX, j*originPoint+originY); 
     [path moveToPoint:pathPoint]; 
     [path addLineToPoint:CGPointMake(i*originPoint+originX+1, j*originPoint+originY+1)]; 
    } 
} 
CAShapeLayer *shapeLayer = [[CAShapeLayer alloc] init]; 
shapeLayer.path = path.CGPath; 
shapeLayer.fillColor = [UIColor whiteColor].CGColor; 
shapeLayer.strokeColor = [UIColor blackColor].CGColor; 
shapeLayer.lineWidth = 1.0; 
[self.layer addSublayer:shapeLayer]; 

и других площадей с двумя петлями

CGFloat sizeOfSquared = self.frame.size.height/6; 
for (int i = 0; i<=self.frame.size.width/sizeOfSquared; i++) { 
    for (int j=0; j!=6; j++) { 

    } 
} 

Но это медленный пользовательский интерфейс и много ресурсов, некоторые из них имеют представление о том, как оптимизировать потребление ресурсов и пользовательский интерфейс?

+0

почему вы не используете UICollectionView .. с 9-кнопочной кнопкой в ​​ячейке –

ответ

0

Если вам не нужны какие-либо операции на отдельных квадратах, вы можете попробовать сделать строки сначала (все вертикальные и 5 горизонтальные), а затем добавить точки в цикле, используя self.frame.size.height/6, деленные на 4 как расстояние между точками и пропустить каждые три очка. Просто предложение. Попробуйте, если это сработает. :)

+0

как насчет коллекции. нелегко и гибко, а не делать это. что вы скажете –

+0

ya collection view будет лучшим решением. Думал, что вам нужно использовать путь безье. Сборка коллекции облегчит ее работу. :) – Priyanka