Первая проблема - метод addCorner
.Вместо добавления каждого угла в переменную ptsArray
он создает новый массив только с последним углом и устанавливает ptsArray
равным этому, поэтому он имеет только один, последний угол.
Изменить addCorner
метод, подобный этому:
-(IBAction)addCorner:(id)sender
{
if (ptsArray == nil)
{
self.ptsArray = [NSMutableArray array];
}
[ptsArray addObject:pointAnnotation];
}
Также убедитесь, что ptsArray
правильно объявлен и синтезирован:
//in the .h file...
@property (nonatomic, retain) NSMutableArray *ptsArray;
//in the .m file...
@synthesize ptsArray;
(Кстати, почему бы не добавить угол к ptsArray
где pointAnnotation
создается вместо отдельного действия пользователя?)
Вторая проблема заключается в методе addPolygonOverlay
.Вы должны использовать свойство NSArray
count
, чтобы получить количество элементов в массиве.Функция sizeof
возвращает количество байтов физической памяти, которое использует переданная переменная.Для ptsArray
, который является указателем, он вернет 4. Если ptsArray
имеет менее 4 элементов, вы получите исключение «индекс вне диапазона».
Поэтому измените
int cornersNumber = sizeof(ptsArray);
до
int cornersNumber = ptsArray.count;
Еще одна важная вещь, на которую следует обратить внимание, это то, что стороны многоугольника будут нарисованы в порядке расположения точек в массиве.Если пользователь не добавляет углы по часовой стрелке или против часовой стрелки, многоугольник будет выглядеть странно.Вы можете воссоздать наложение полигонов сразу после того, как пользователь добавит / удалит аннотацию, чтобы немедленно получить обратную связь о том, как она будет выглядеть.