Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.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
iOS动画父视图的边界更改子视图边界_Ios_Uiview_Core Animation_Subview_Bounds - Fatal编程技术网

iOS动画父视图的边界更改子视图边界

iOS动画父视图的边界更改子视图边界,ios,uiview,core-animation,subview,bounds,Ios,Uiview,Core Animation,Subview,Bounds,我正在尝试创建一个视图动画,类似于在删除iPhone版本中的消息时facebook的扩展X。我现在面临的问题是,我正在使用核心动画为父视图的边界设置动画,并且生成的子视图动画正在使用它设置动画。最终,我想要的是在父视图的中心设置父视图的动画,并且子视图保持未设置动画。下面是我正在使用的代码 @interface FCXView : UIView @end @implementation FCXView - (id)initWithFrame:(CGRect)frame { self

我正在尝试创建一个视图动画,类似于在删除iPhone版本中的消息时facebook的扩展X。我现在面临的问题是,我正在使用核心动画为父视图的边界设置动画,并且生成的子视图动画正在使用它设置动画。最终,我想要的是在父视图的中心设置父视图的动画,并且子视图保持未设置动画。下面是我正在使用的代码

@interface FCXView : UIView

@end

@implementation FCXView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

        self.backgroundColor = [UIColor clearColor];
        self.layer.opacity = 1.0f;
        self.alpha = 1.0f;
        self.autoresizingMask = UIViewAutoresizingNone;
    }
    return self;
}

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGFloat lineWidth2 = 1.0f;
    CGContextSetLineWidth(context, lineWidth2);
    CGFloat red[4] = {1.0f, 0.0f, 0.0f, 0.9f};
    CGContextSetStrokeColor(context, red);
    CGContextBeginPath(context);
    CGContextMoveToPoint(context, 17.0f, 15.0f);
    CGContextAddLineToPoint(context, 28.0f, 30.0f);
    CGContextStrokePath(context);
    CGContextBeginPath(context);
    CGContextMoveToPoint(context, 28.0f, 15.0f);
    CGContextAddLineToPoint(context, 17.0f, 30.0f);
    CGContextStrokePath(context);

    CGContextFillPath(context);
}

@end

@interface FCRoundView ()

@end

@implementation FCRoundView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

        // Initialization code
        self.backgroundColor = [UIColor clearColor];
        self.layer.opacity = 1.0f;
        self.userInteractionEnabled = YES;
        self.multipleTouchEnabled = NO;
        self.autoresizesSubviews = NO;

        [self setupXView];
    }
    return self;
}

- (void)setupXView
{
    // Load X
    FCXView *xView = [[FCXView alloc] initWithFrame:CGRectMake(0, 0, 45, 45)];
    [self addSubview:xView];
}

- (void)drawRect:(CGRect)rect
{
    CGFloat lineWidth = 5;
    CGRect borderRect = CGRectInset(rect, lineWidth * 0.5, lineWidth * 0.5);

    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0);
    CGContextSetRGBFillColor(context, 175.0/255.0, 175.0/255.0, 175.0/255.0, 0.6);
    CGContextSetLineWidth(context, 5.0);
    CGContextFillEllipseInRect (context, borderRect);
    CGContextStrokeEllipseInRect(context, borderRect);
}

#pragma mark - Handle touch

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    if (self.bounds.size.height == 45) {
        SKBounceAnimation *bounceAnimation = [SKBounceAnimation animationWithKeyPath:@"bounds"];
        bounceAnimation.fromValue = [NSValue valueWithCGRect:self.frame];
        bounceAnimation.toValue = [NSValue valueWithCGRect:CGRectMake(0, 0, 75, 75)];
        bounceAnimation.duration = 0.5f;
        bounceAnimation.numberOfBounces = 4;
        bounceAnimation.delegate = self;
        bounceAnimation.removedOnCompletion = NO;
        bounceAnimation.fillMode = kCAFillModeForwards;
        bounceAnimation.shouldOvershoot = YES;
        [self.layer addAnimation:bounceAnimation forKey:@"someKey"];
    }
    else {
        SKBounceAnimation *bounceAnimation = [SKBounceAnimation animationWithKeyPath:@"bounds"];
        bounceAnimation.fromValue = [NSValue valueWithCGRect:self.frame];
        bounceAnimation.toValue = [NSValue valueWithCGRect:CGRectMake(0, 0, 45, 45)];
        bounceAnimation.duration = 0.5f;
        bounceAnimation.numberOfBounces = 4;
        bounceAnimation.delegate = self;
        bounceAnimation.removedOnCompletion = NO;
        bounceAnimation.fillMode = kCAFillModeForwards;
        [self.layer addAnimation:bounceAnimation forKey:@"someKey1"];
    }
}

- (void)animationDidStop:(SKBounceAnimation *)animation finished:(BOOL)flag
{
    [self.layer setValue:animation.toValue forKeyPath:animation.keyPath];
    [self.layer removeAnimationForKey:@"someKey"];
    [self.layer removeAnimationForKey:@"someKey1"];
}

如果你想独立地设置它们的动画,你的视图必须是兄弟姐妹,而不是父/子视图。是的,这就是我最后所做的,并归档了我所想象的。