在iOS中使用嵌套NSArray

时间:2015-03-14 14:21:07

标签: ios objective-c nsmutablearray nsarray nsdictionary

我有两个NSArray。一个持有一些.png而另一个持有一些持续时间0.04
像:

imageArray 
(
    "smiley64_1_1.png",
    "smiley64_1_2.png",
    ...................
    ...................
    "smiley64_1_19.png",
    "smiley64_1_20.png"
)

durationArray 
(
    "0.04",
    "0.04",
    ......
    ......
    "0.05",
    "0.02"
)

我使用UIImageViewperformSelector中显示它们,以便它们可以像动画一样(表情符号)。

-(void) imageAnimationWithImage:(NSArray *) imgarray andDurationArray:(NSArray *) durationArr
{
    if (count == imgarray.count)
    {
        count = 0;
        [self imageAnimationWithImage:imgarray andDurationArray:durationArr];
    }
    else
    {
        emoImageView.image = [UIImage imageNamed:[imgarray objectAtIndex:count]];

        double delay = [[durationArr objectAtIndex:count] doubleValue];
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [self imageAnimationWithImage:imgarray andDurationArray:durationArr];
        });

        count++;
    }
}

从这个方法中调用它:

-(void) createScrollWithImageArray:(NSArray *) imgArray AndDurationArray:(NSArray *) durArray AndName:(NSString *) name withCount:(NSInteger) i
{
    int imageViewPointx = 8;
    int imageViewPointy = 8;
    int imageViewWidth = 42;
    int imageViewHeight = 43;
    int gapBetweenImageViews = 12;
    i = i - 1;

    emoImageView = [[UIImageView alloc] init];
    [emoImageView setFrame:CGRectMake((imageViewPointx +((imageViewWidth + gapBetweenImageViews) *i)), imageViewPointy, imageViewWidth, imageViewHeight)];


    count = 0;
    [self imageAnimation];

    [emoImageView setUserInteractionEnabled:YES];
    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapping:)];

    [singleTap setNumberOfTapsRequired:1];
    [emoImageView addGestureRecognizer:singleTap];

    [scrollView addSubview:emoImageView];
}

最后一种方法是从for loop调用。当我运行它时,每次都得到3个信息。

  1. 数组名称(第1帧)
  2. ImageArray(.png)
  3. DurationArray(时间间隔)
  4. 在这种情况下,它只调用一次,因为我只有一个帧信息(图像名称和持续时间)。它运作完美。但如果我有多组信息,如:

    imageArray 
    (
        "smiley64_2_1.png",
        "smiley64_2_2.png",
        ...................
        ...................
        "smiley64_2_19.png",
        "smiley64_2_20.png"
    )
    
    durationArray 
    (
        "0.02",
        "0.02",
        ......
        ......
        "0.05",
        "0.02"
    )
    

    imageArray 
    (
        "smiley64_2_1.png",
        "smiley64_2_2.png",
        ...................
        ...................
        "smiley64_2_19.png",
        "smiley64_2_20.png"
    )
    
    durationArray 
    (
        "0.02",
        "0.02",
        ......
        ......
        "0.05",
        "0.02"
    )
    

    它不起作用。实际上它只为最后一个数组信息设置了动画。所以,我的问题是如何在不同的UIImageView中同时为所有信息集制作动画?如果您有任何疑问,请问我。 非常感谢提前。祝你有个美好的一天。

    添加:项目代码: "Click here"

1 个答案:

答案 0 :(得分:1)

你的问题不是很清楚。你说你"得到3个信息",然后列出数组名称(Frame1),imageArray和DurationArray。

我不明白第一个是什么。 "数组名称(Frame1)"。那是什么?

您的方法createScrollWithImageArray需要4个参数,包括AndName和withCount。它根本不清楚它们的用途。

你递增你的计数变量i,但是从不对它做任何其他事情,所以它增加的事实是没有意义的。

认为你要做的是传递不同的图像名称和持续时间数组,并使用这些不同的数组使代码动画化。

在我看来,你和我很近。只需添加2个参数即可 在createScrollWithImageArray中,只需将图像名称数组和持续时间数组传递给imageAnimation方法,并使用这些数组而不是全局数组来执行动画。然后在createScrollWithImageArray中,将图像名称数组和持续时间数组传递给imageAnimation。

至于你想要的数组名称和计数,我不知道。