Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 层上的动画不';我不想被移除_Iphone_Ios_Core Animation_Calayer_Mask - Fatal编程技术网

Iphone 层上的动画不';我不想被移除

Iphone 层上的动画不';我不想被移除,iphone,ios,core-animation,calayer,mask,Iphone,Ios,Core Animation,Calayer,Mask,我有一个面具,我已经建立了感谢层和图像。我想移动这个层与小“跳跃”(没有一个很好的翻译动画) 问题是,每当我移动遮罩层的帧时,就会出现动画。我试着打电话给[maskLayer RemoveAllianimations]但它不会改变任何东西 在我的代码中,我根本没有放任何动画,所以我不明白这个动画来自哪里 启动此功能时: -(void) moveAlternativeMask:(CALayer*) maskLayer { NSLog (@"moveAlternativeMask %@",

我有一个面具,我已经建立了感谢层和图像。我想移动这个层与小“跳跃”(没有一个很好的翻译动画)

问题是,每当我移动遮罩层的帧时,就会出现动画。我试着打电话给
[maskLayer RemoveAllianimations]但它不会改变任何东西

在我的代码中,我根本没有放任何动画,所以我不明白这个动画来自哪里

启动此功能时:

-(void) moveAlternativeMask:(CALayer*) maskLayer {
     NSLog (@"moveAlternativeMask %@", NSStringFromCGRect(maskLayer.frame));

    // Change the frame of the layer
    CGRect originalFrame = maskLayer.frame;
    CGFloat newYPos = maskLayer.frame.origin.y + 5.;
    maskLayer.frame = CGRectMake (originalFrame.origin.x, newYPos, originalFrame.size.width, originalFrame.size.height);

    // Try removing all animations on the layer
    NSLog (@"Animations");
    for (NSString* animationKey in maskLayer.animationKeys) {
        NSLog(@"    Animation With Key %@", animationKey);
    }
    NSLog (@"End animations");
    [maskLayer removeAllAnimations];

    NSLog (@"Animations after removing");
    for (NSString* animationKey in maskLayer.animationKeys) {
        NSLog(@"    Animation With Key %@", animationKey);
    }
    NSLog (@"End animations after removing");

    // Launch the animation with a small delay
    [self performSelector:@selector(moveAlternativeMask:) withObject:maskLayer afterDelay:0.5];

}
我得到这个日志:

----moveAlternativeMask{{0,200},{768,643}---- 动画 带关键点的动画:位置 结束动画 删除后的动画
删除后结束动画

---移动可选掩码{0,205},{768,643} 动画 带关键点的动画:位置 结束动画 删除后的动画
删除后结束动画

---moveAlternativeMask{{0,210},{768,643} 动画 带关键点的动画:位置 结束动画 删除后的动画
删除后结束动画

因此,层被移动,因为我想,唯一的问题是,“位置”动画不断回来

请注意,CALayer是这样构建的:

UIImage *maskImage = [UIImage imageNamed:@"masque2.png"];
self.maskLayer = [CALayer layer];
self.maskLayer.contents = (id) maskImage.CGImage;
self.maskLayer.frame = CGRectMake(0, ORIGINAL_Y_POSITION, 768, 643);
[myView.layer setMask:self.maskLayer];

嗯,很奇怪。我有两个想法:

  • UIView
    来代替它是否可行
  • 您是否可以尝试
    从超级视图中删除
    添加子视图
    ,而不只是更改帧

  • 1-我不知道如何在不使用图层的情况下指定遮罩。你…吗?2-是的,当我移除上一个遮罩层并在正确的位置构建一个新的遮罩层时,它就起作用了。我想这对性能不好,但在iPad上似乎还可以。谢谢