0

これはModalViewController使用StoryBoard中です。ARC

ビューを閉じると、この行が表示されます... NSLog(@"%d %@",[imgArray count],fileName);...何度も何度も印刷されています。

transitionWithView/animateWithDurationビューが閉じられたときに関数を強制終了するにはどうすればよいですか?

非常に重要な何かが欠けています!

.h

#import <UIKit/UIKit.h>

@interface InfoVC : UIViewController

@property (weak, nonatomic) IBOutlet UIImageView *imageview;
@property (weak, nonatomic) IBOutlet UIScrollView *scrollview;

@end

.m

#import "InfoVC.h"
#import <QuartzCore/QuartzCore.h>

@interface InfoVC ()

@end

@implementation InfoVC {
    int randomInt;
    NSArray *imgs;
    NSMutableArray *imgArray;
    NSTimer *myTimer;
    NSTimer *myTimer2;
    NSString *currentImg;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    imgs = [NSArray arrayWithObjects:
                      @"01.jpg",
                      @"02.jpg",
                      @"03.jpg",
                      nil];
    imgArray = [imgs mutableCopy];
    [self initialImage];
}


- (void)initialImage
{
    _imageview.contentMode = UIViewContentModeLeft;

    int rnd = [imgArray count];
    randomInt = (arc4random()%rnd);
    currentImg = [imgArray objectAtIndex:randomInt];    
    UIImage *image = [UIImage imageNamed:currentImg];

    [_imageview setImage:image];
    _imageview.bounds = CGRectMake(0, 0, image.size.width, image.size.height);

    _scrollview.contentSize = image.size;
    _scrollview.contentOffset = CGPointMake(-150.0, 0.0);

    [imgArray removeObjectAtIndex: randomInt];

    [self animate];
}

- (void)randomImage
{        
    if ([imgArray count]==0) {
        imgArray = [imgs mutableCopy];
    }

    int rnd = [imgArray count];
    randomInt = (arc4random()%rnd);
    NSString *fileName = [imgArray objectAtIndex:randomInt];

    NSLog(@"%d %@",[imgArray count],fileName);

    [imgArray removeObjectAtIndex: randomInt];

    UIImage * toImage = [UIImage imageNamed:fileName];


    void (^completion)(void) = ^{
        [self animate];
    };

    [UIView transitionWithView:self.view
                      duration:1.75f
                       options:UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionAllowUserInteraction
                    animations:^
                    {
                        _imageview.image = toImage;
                    }
                    completion:^(BOOL finished)
                    {
                        completion();
                    }
    ];

}

- (void)animate{

    CGPoint offset = _scrollview.contentOffset;

    float flt = 150.0;

    if (_scrollview.contentOffset.x == flt)
    {
        offset.x = 0.0 ;
    }
    else
    {
        offset.x = flt ;
    }

    void (^completion2)(void) = ^{
        [self randomImage];
    };

    [UIView animateWithDuration:5.0 delay:0 options:UIViewAnimationOptionAllowUserInteraction | UIViewAnimationCurveEaseIn
                     animations:^{
                         _scrollview.contentOffset = offset; 
                     }completion:^(BOOL completed){
                         completion2();
                     }
     ];


}

- (void)viewDidUnload
{
    [super viewDidUnload];

    [_scrollview.layer removeAllAnimations];
    [_imageview.layer removeAllAnimations];
}


- (IBAction)dismissInfo:(id)sender
{
    [_scrollview.layer removeAllAnimations];
    [_imageview.layer removeAllAnimations];

    [self dismissModalViewControllerAnimated:YES];
}
4

1 に答える 1

1

私はレトロフィッティング、使用などtransitionWithViewで膨大なものを使用してみました.CABasicAnimationNSTimer

最後に、私はちょうどやった:

[_imageview removeFromSuperview];

ビューを却下すると、すべてが素晴らしかった。

しかし、ここの他の投稿から、アルファトランジションを a に適用するときにバグがあるように見えますUIScrollview-透明なときにビューへの参照が失われます。

于 2012-11-09T10:19:55.073 に答える