何か変なことに問題があります。無限に反転するUIViewのグリッドを作成しようとしています。この目的のために、私は次のクラスを作成しました。
@implementation LMFlipViewController
@synthesize viewOne=_viewOne, viewTwo=_viewTwo, animationDuration=_animationDuration, pause=_pause, animationFlag=_animationFlag;
-(LMFlipViewController *)initWithViewOne:(UIView *)viewOne viewTwo:(UIView *)viewTwo animationDuration:(CGFloat)animationDuration andPauseInBetweenAnimation:(CGFloat)pause {
[super init];
[self.view setFrame:viewOne.bounds];
_viewOne=viewOne;
_viewTwo=viewTwo;
_animationDuration=animationDuration;
_pause=pause;
return self;
}
-(void)viewDidLoad{
[super viewDidLoad];
NSLog(@"0");
_animationFlag=NO;
}
-(void)viewDidUnload{
[super viewDidUnload];
}
-(void)viewWillAppear:(BOOL)animated {
[self.view addSubview:_viewOne];
// [self performSelector:@selector(loopAnimation) withObject:nil afterDelay:_pause];
[NSTimer scheduledTimerWithTimeInterval:_pause
target:self
selector:@selector(loopAnimation)
userInfo:nil
repeats:NO];
NSLog(@"1");
}
-(void)triggerAnimation {
NSLog(@"5");
if (_animationFlag) {
NSLog(@"Animation flag: YES");
_animationFlag=NO;
[UIView transitionWithView:self.view duration:_animationDuration options:(UIViewAnimationOptionTransitionFlipFromLeft) animations: ^{
[_viewTwo removeFromSuperview];
} completion:^(BOOL finished) {
[UIView transitionWithView:self.view duration:_animationDuration options:(UIViewAnimationOptionTransitionFlipFromLeft) animations: ^{
[self.view addSubview:_viewOne];
} completion:nil];
}];
}else{
NSLog(@"Animation flag: NO");
_animationFlag=YES;
[UIView transitionWithView:self.view duration:_animationDuration options:(UIViewAnimationOptionTransitionFlipFromLeft) animations: ^{
[_viewOne removeFromSuperview];
} completion:^(BOOL finished) {
[UIView transitionWithView:self.view duration:_animationDuration options:(UIViewAnimationOptionTransitionFlipFromLeft) animations: ^{
[self.view addSubview:_viewTwo];
} completion:nil];
}];
}
NSLog(@"6");
}
-(void)loopAnimation {
NSLog(@"2");
[self triggerAnimation];
NSLog(@"3");
// [self performSelector:@selector(loopAnimation) withObject:nil afterDelay:_pause];
[NSTimer scheduledTimerWithTimeInterval:_pause
target:self
selector:@selector(loopAnimation)
userInfo:nil
repeats:NO];
NSLog(@"4");
}
@end
次に、このクラスを次のように試しました。
- (void)viewDidLoad {
[super viewDidLoad];
UIView *viewOne=[[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 50)];
viewOne.backgroundColor=[UIColor redColor];
UIView *viewTwo=[[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 50)];
viewTwo.backgroundColor=[UIColor purpleColor];
LMFlipViewController *flipViewController=[[LMFlipViewController alloc] initWithViewOne:viewOne viewTwo:viewTwo animationDuration:0.5 andPauseInBetweenAnimation:3];
[self.view addSubview:flipViewController.view];
UIView *viewThree=[[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 50)];
viewThree.backgroundColor=[UIColor blackColor];
UIView *viewFour=[[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 50)];
viewFour.backgroundColor=[UIColor blueColor];
LMFlipViewController *flipViewControllerTwo=[[LMFlipViewController alloc] initWithViewOne:viewThree viewTwo:viewFour animationDuration:0.5 andPauseInBetweenAnimation:3];
[flipViewControllerTwo.view setFrame:CGRectMake(0, 60, 100, 50)];
[self.view addSubview:flipViewControllerTwo.view];
}
この方法は完璧に機能しました。重要なのは、この方法でいくつかのフリップビューをインスタンス化する必要があり、それらを「for」ループで実装する必要があるということです。だから私はこれを試しました:
- (void)viewDidLoad {
[super viewDidLoad];
for (int i=0;i<2;i++) {
UIView *viewOne=[[UIView alloc] initWithFrame:CGRectMake(0, i*60, 100, 50)];
viewOne.backgroundColor=[UIColor redColor];
UIView *viewTwo=[[UIView alloc] initWithFrame:CGRectMake(0, i*60, 100, 50)];
viewTwo.backgroundColor=[UIColor purpleColor];
[self.view addSubview:[[LMFlipViewController alloc] initWithViewOne:viewOne viewTwo:viewTwo animationDuration:0.5 andPauseInBetweenAnimation:3].view];
}
}
ループを試してみると、最初のビューは正しくアニメーション化されていますが、他のビューは正しくアニメーション化されていません。アニメーションはスキップされ、ビューの切り替えはまっすぐになります。
誰かが理由を知っていますか?私の推測では、それはスレッドの問題かこのようなものだと思いますが、私はこれらのものについて無知です。どんな助けでも歓迎します。どうも。