I need to create moving image from bot to top, with different speed of moving and size. I wrote this:
NSInteger random=arc4random()%10;
random += 10;
for (NSInteger curImage = 0 ; curImage < random; curImage++)
{
    UIImageView *tmpImage = [[UIImageView alloc]  initWithImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"ball" ofType:@"png"]]];
    [self addSubview:tmpImage];
    [self sendSubviewToBack:tmpImage];
    tmpImage.tag = imageTag;
    NSInteger sizeImage  = arc4random()%4;
    sizeImage += 1;
    tmpImage.frame  = CGRectMake(0.0,0.0, sizeImage * 10.0, sizeImage * 10.0);
    tmpImage.contentMode = UIViewContentModeScaleToFill;
    NSInteger xStartPosition = arc4random()%1024, yStartPosition = arc4random()%748;
    tmpImage.center = CGPointMake( xStartPosition , yStartPosition + self.frame.size.height);
    [UIView animateWithDuration:6.0f
                     animations:^{
                         [tmpImage setFrame:CGRectMake(tmpImage.frame.origin.x, - tmpImage.image.size.height - self.frame.size.height, tmpImage.frame.size.width, tmpImage.frame.size.height)];
                     }
                     completion:^(BOOL finished){
                     }
     ];
}
For deleting I use:
for (UIImageView *img in [self subviews]) {
        if (img.tag==imageTag) {
            if (img.frame.origin.y > 0 ) {
                [img removeFromSuperview];
            }
        }
    }
But my app crash Exited: Killed: 9.
May be I can make it in another way? Any ideas???
Thanks for help!!!
<Warning>: Application 'UIKitApplication:Name.Name' exited abnormally with signal 9: Killed: 9
 error: ::read ( 5, 0x1df9fc, 18446744069414585344 ) => -1 err = Bad file descriptor (0x00000009)
libMobileGestalt copySystemVersionDictionaryValue: Could not lookup ReleaseType from system version dictionary
Best if you enable breakpoint and check where it's crashing.
Add exception break point to your xcode:
But my guess is you are modifying an array while iterating it. While going through [self subviews] you indirectly modify it when you call [img removeFromSuperView].
Try this:
NSMutableArray* toRemove = [NSMutableArray arrray];
for (UIImageView *img in [self subviews]) {
    if (img.tag==imageTag) {
        if (img.frame.origin.y > 0 ) {
        [toRemove addObject:img];
        }
    }
}
for (UIImageView *img in toRemove) {
    [img removeFromSuperview];
}
 Grzegorz Krukowski
 Grzegorz KrukowskiUser contributions licensed under CC BY-SA 3.0