0

UIViewのレイヤーにシャドウレイヤーをサブレイヤーとして追加しました。UIView以下は、サブクラスの追加メソッドです。

- (void)addDefaultShadowSubview {
    self.shadowSubview = [[[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, self.frame.size.width, self.frame.size.height)] autorelease];

    CALayer *shadowLayer = [CALayer layer];
    shadowLayer.backgroundColor = self.backgroundColor.CGColor;
    shadowLayer.shadowOffset = CGSizeMake(0, 3);
    shadowLayer.shadowRadius = 5.0;
    shadowLayer.shadowColor = [UIColor blackColor].CGColor;
    shadowLayer.shadowOpacity = 0.8;

    shadowLayer.frame = self.shadowSubview.frame;

    [self.shadowSubview.layer addSublayer:shadowLayer];

    self.shadowSubview.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

    [self addSubview:self.shadowSubview];
    [self sendSubviewToBack:self.shadowSubview];
}

UIViewShadowSubview を使用した an のサイズ変更アニメーションの一部として保持したいと思います。しかし、使用中に正しい方法を見つけることができません+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;

[UIView animateWithDuration:durationDefaultAnimation
                     animations:^{
                         [self.viewWithShadowSubview setFrame:enlargedFrame];
                     }
                     completion:^(BOOL finished) {
                         [self modifyInsetForCurrentImageviewWithAnimation:YES];
                     }];

正しい方法を知るのを手伝ってください。について学習しようとしましCABasicAnimationたが、このケースに適用する方法が見つかりません。

4

3 に答える 3

1

シャドウレイヤーのプロパティも設定してから、 CALayerのアニメーションのshadowPathプロパティshadowPathを参照してシャドウパスのアニメーションを実装することをお勧めします。

于 2012-03-18T21:59:04.763 に答える
0

Davidが言うように、shadowSubviewに直接シャドウを設定します。

これを行うには、次を置き換えます。

    - (void)addDefaultShadowSubview {
    self.shadowSubview = [[[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, self.frame.size.width, self.frame.size.height)] autorelease];

    CALayer *shadowLayer = [CALayer layer];
    shadowLayer.backgroundColor = self.backgroundColor.CGColor;
    shadowLayer.shadowOffset = CGSizeMake(0, 3);
    shadowLayer.shadowRadius = 5.0;
    shadowLayer.shadowColor = [UIColor blackColor].CGColor;
    shadowLayer.shadowOpacity = 0.8;

    shadowLayer.frame = self.shadowSubview.frame;

    [self.shadowSubview.layer addSublayer:shadowLayer];

    self.shadowSubview.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

    [self addSubview:self.shadowSubview];
    [self sendSubviewToBack:self.shadowSubview];
}

これで

- (void)addDefaultShadowSubview {
    self.shadowSubview = [[[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, self.frame.size.width, self.frame.size.height)] autorelease];

    CALayer *self.shadowSubview.layer = [CALayer layer];
    self.shadowSubview.layer.backgroundColor = self.backgroundColor.CGColor;
    self.shadowSubview.layer.shadowOffset = CGSizeMake(0, 3);
    self.shadowSubview.layer.shadowRadius = 5.0;
    self.shadowSubview.layer.shadowColor = [UIColor blackColor].CGColor;
    self.shadowSubview.layer.shadowOpacity = 0.8;
}
于 2012-03-18T19:26:48.190 に答える