ios - 用于坐标的 Obj-c 数组 - 最佳实践?

标签 ios objective-c arrays

我最近开始自学 Obj-c,并进行了一个大型项目,以便在出现时学习语言的原理。我正在用 14 block 棋盘制作游戏。现在在放置这些时,我觉得最好将每个图 block 的坐标放在 .plist 中,访问此信息然后返回每个坐标。所以 plist 看起来像这样:

root ---> position on board ---> item 0 ---> TileX (number(4)), Tile y (number(12)) ---> item 1 ...等。等最多 13 个。

现在在代码中我有这个作为

NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:@"WheelData.plist"];
NSDictionary *plistData = [NSDictionary dictionaryWithContentsOfFile:finalPath];
NSArray *positionOnBoard = [NSArray arrayWithArray:[plistData objectForKey:@"Position On Board"]];

int numberOfPositions = [positionOnBoard count];

NSMutableArray *PositionX;
NSMutableArray *PositionY;
NSMutableArray *arrayOfPositionsX = [[NSMutableArray alloc] initWithCapacity:numberOfPositions];
NSMutableArray *arrayOfPositionsY = [[NSMutableArray alloc] initWithCapacity:numberOfPositions];
for (int d = 0; d < numberOfPositions; d++) {
    [arrayOfPositionsX addObject:[[positionOnBoard objectAtIndex:d] objectForKey:@"Tile X"]];
    [arrayOfPositionsY addObject:[[positionOnBoard objectAtIndex:d] objectForKey:@"Tile Y"]];
    PositionX = [NSMutableArray arrayWithArray:arrayOfPositionsX];
    PositionY = [NSMutableArray arrayWithArray:arrayOfPositionsY];

    if (d == 0) {
        NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
    } else if (d == 1) {
        [arrayOfPositionsX removeObjectAtIndex:0];
        [arrayOfPositionsY removeObjectAtIndex:0];
        NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
    } else if (d == 2) {
        [arrayOfPositionsX removeObjectAtIndex:0];
        [arrayOfPositionsY removeObjectAtIndex:0];
        NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
    } else if (d == 3) {
        [arrayOfPositionsX removeObjectAtIndex:0];
        [arrayOfPositionsY removeObjectAtIndex:0];
        NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
    } else if (d == 4) {
        [arrayOfPositionsX removeObjectAtIndex:0];
        [arrayOfPositionsY removeObjectAtIndex:0];
        NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
    } else if (d == 5) {
        [arrayOfPositionsX removeObjectAtIndex:0];
        [arrayOfPositionsY removeObjectAtIndex:0];
        NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
    } else if (d == 6) {
        [arrayOfPositionsX removeObjectAtIndex:0];
        [arrayOfPositionsY removeObjectAtIndex:0];
        NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
    } else if (d == 7) {
        [arrayOfPositionsX removeObjectAtIndex:0];
        [arrayOfPositionsY removeObjectAtIndex:0];
        NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
    } else if (d == 8) {
        [arrayOfPositionsX removeObjectAtIndex:0];
        [arrayOfPositionsY removeObjectAtIndex:0];
        NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
    } else if (d == 9) {
        [arrayOfPositionsX removeObjectAtIndex:0];
        [arrayOfPositionsY removeObjectAtIndex:0];
        NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
    } else if (d == 10) {
        [arrayOfPositionsX removeObjectAtIndex:0];
        [arrayOfPositionsY removeObjectAtIndex:0];
        NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
    } else if (d == 11) {
        [arrayOfPositionsX removeObjectAtIndex:0];
        [arrayOfPositionsY removeObjectAtIndex:0];
        NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
    } else if (d == 12) {
        [arrayOfPositionsX removeObjectAtIndex:0];
        [arrayOfPositionsY removeObjectAtIndex:0];
        NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
    } else {
        [arrayOfPositionsX removeObjectAtIndex:0];
        [arrayOfPositionsY removeObjectAtIndex:0];
        NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
    }

}
return PositionX;
return PositionY;

现在很明显,此刻我只是在记录这个,所以我让每个图 block 返回它的 X 值和 Y 值。我最终会将它绘制到某种 CGRectMake 网格上,然后使用图像在 View Controller 上显示它。正如我所说,我对此很陌生并且仍在学习。有没有更简单的方法来做到这一点?更好的方法?非常感谢您的反馈,谢谢!

最佳答案

您可以简单地以 {10,10}.... 格式将一串位置添加到您的 plist 文件中。 所以你的 plist 结构看起来像这样;

<plist version="1.0">
<array>
    <string>{10,10}</string>
    <string>{10,10}</string>
    <string>{10,10}</string>
    <string>{10,10}</string>
    <string>{10,10}</string>
    <string>{10,10}</string>
    <string>{10,10}</string>
    <string>{10,10}</string>
    <string>{10,10}</string>
    <string>{10,10}</string>
    <string>{10,10}</string>
    <string>{10,10}</string>
    <string>{10,10}</string>
    <string>{10,10}</string>
</array>
</plist>

然后,访问如下数据;

NSArray *positionsArray = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Page" ofType:@"plist"]];

上面的数组将以 NSString 格式保存所有位置。您可以从这些 NSString 生成一个 CGPoint。 您可以直接使用这些 CGPoints 来定位您的图 block ,或者您甚至可以根据需要分离出 X 和 Y 坐标。请在下面找到代码片段;

int count = 0;
for(NSString *strPos in positionsArray)
{
    count++;
    CGPoint position = CGPointFromString(strPos);
    NSLog(@"Position %d -> X:%f Y:%f",count,position.x,position.y);
}

关于ios - 用于坐标的 Obj-c 数组 - 最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22964313/

相关文章:

c++ - 从数字数组中查找可能的字母字符串数

ios - 为多个 iOS 版本开发应用程序

objective-c - 如何获取 OS X 中复选框的值

ios - 从 NSData 确定 MIME 类型?

java - 从 Object 类型的数组调用方法

JavaScript 仅通过 messageid 将对象创建为数组

ios - 如何在iOS中更改抽奖中的动画颜色?

ios - 毒蛇架构 : how to obtain return info from a module

ios - 闭包递归和保留循环

ios - 尝试移动我的自定义UITextField清除按钮,但无法调整大小或正确移动