Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 从地图中用户放置的注释创建多边形_Iphone_Ios_Mkmapview_Mkannotation_Mkoverlay - Fatal编程技术网

Iphone 从地图中用户放置的注释创建多边形

Iphone 从地图中用户放置的注释创建多边形,iphone,ios,mkmapview,mkannotation,mkoverlay,Iphone,Ios,Mkmapview,Mkannotation,Mkoverlay,我希望用户能够在地图中放置一些(未知数量)MkPointAnnotation后创建多边形。我已经放置了一个手势识别器,一旦用户点击按钮就会激活,因此可以放置批注。但是如何将这些用作MKPolygon的角点? 下面是保存多边形角点的代码。这是在我对其进行了一些修改之后完成的。现在应用程序崩溃,崩溃报告器说索引超出范围。这些角点是通过手势识别器创建的MKPointAnnotation-s -(IBAction)addCorner:(id)sender { NSMutableArray *addCor

我希望用户能够在地图中放置一些(未知数量)MkPointAnnotation后创建多边形。我已经放置了一个手势识别器,一旦用户点击按钮就会激活,因此可以放置批注。但是如何将这些用作MKPolygon的角点? 下面是保存多边形角点的代码。这是在我对其进行了一些修改之后完成的。现在应用程序崩溃,崩溃报告器说索引超出范围。这些角点是通过手势识别器创建的MKPointAnnotation-s

-(IBAction)addCorner:(id)sender
{
NSMutableArray *addCorners = [[NSMutableArray alloc] init];
[addCorners addObject:pointAnnotation];
ptsArray = addCorners;
}

-(IBAction)addPolygonOverlay:(id)sender
{
int cornersNumber = sizeof(ptsArray);
MKMapPoint points[cornersNumber];

for (int i=0; i<cornersNumber; i++) {
    points[i] = MKMapPointForCoordinate([[ptsArray objectAtIndex:i] coordinate]);
}

MKPolygon *polygon = [MKPolygon polygonWithPoints:points count:cornersNumber];
[mapview addOverlay:polygon];

}
-(iAction)addCorner:(id)发送方
{
NSMutableArray*addCorners=[[NSMutableArray alloc]init];
[addCorners addObject:pointAnnotation];
ptsArray=addCorners;
}
-(iAction)addPolygonOverlay:(id)发送方
{
int cornersumber=sizeof(ptsArray);
MKMapPoint points[拐角数目];

对于(int i=0;i第一个问题是
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;
(顺便问一下,为什么不在创建
pointAnnotation
ptsArray
右侧添加角点,而不是在单独的用户操作中?)


第二个问题是
addPolygonOverlay
方法。必须使用
NSArray
count
属性来获取数组中的项数。
sizeof
函数返回传递变量使用的物理内存字节数。对于指针
ptsArray
,它将返回4.I如果
ptsArray
的项目少于4项,则会出现“索引超出范围”异常

所以改变

int cornersNumber = sizeof(ptsArray);



另一个需要注意的重要事项是,多边形边将按照点在数组中的顺序绘制。如果用户不按顺时针或逆时针顺序添加角点,多边形将看起来很奇怪。用户添加/删除注释后,您可以立即重新创建多边形覆盖,以便他们立即获得反馈外观如何。

如何存储角点列表(注释)多边形的角?你试过什么?我明白我做错了什么。我试过你说的,效果很好!顺便说一句,我想我会按照你说的,在创建“pointAnnotation”的地方向“ptsArray”添加角点。我使用“sizeof”函数是多么愚蠢,我完全忘记了“count”属性。谢谢你的支持我们的帮助,真的很宝贵!我可以问一个意见吗?我正在创建两个叠加,并使用手势识别器,一个长压(1秒)和点击(多边形)。问题是,在我点击了激活这些手势识别器和创建叠加的两个按钮后(首先我做了一个圆,然后是一个多边形),当我想创建第二个圆时,我会得到两个管脚,一个“作为敲击”,一个接一个…我想尝试创建一个全局手势识别器,该识别器由“viewdidload”方法初始化,然后“customize”Mkmappon在我前面提到的按钮点击动作方法中的局部使用。你认为呢?你可能想问一个新问题,但一个简单的解决方案是一次只启用一个手势识别器。当用户点击按钮创建圆圈时,启用长按gr并禁用tap-gr。当用户点击按钮以创建多边形。在某个地方显示一个标签,显示哪个gr当前处于活动状态,这对用户很有帮助。
int cornersNumber = ptsArray.count;