(iOS的5.1的XCode 4.4)CALayer的動畫與CATransaction表現不同由視圖前面時調整
編輯:目前(在iOS 7.0),該層似乎一致地忽略所述第一非動畫變化,和總是從原始值開始動畫。我不能再重新生成對視圖大小的依賴。
我有一個CALayer,它的位置首先隨着[CATransaction setDisableActions:YES](所以不是動畫)改變,然後直接用[CATransaction setDisableActions:NO](動畫)改變。通常,這將導致從第一次更改中設置的位置到第二次更改中設置的位置的動畫。但是,我發現我的代碼是從第二次更改的動畫從初始位置移動到位置。
經過大量的測試和調試之後,我發現它依賴於UIView,它包含在更改之前被調整大小的圖層。在這兩個您的通話YES到setPostion:代碼重現(iphone單一視圖模板,添加QuartzCore.framework):
#import <QuartzCore/QuartzCore.h>
#import "TAViewController.h"
@interface TAViewController()
@property (nonatomic, strong) UIView *viewA;
@property (nonatomic, strong) CALayer *layerA;
@end
@implementation TAViewController
- (IBAction)buttonPressed
{
self.viewA.frame = CGRectMake(0, 30, 320, 250);
[self setPosition:CGPointMake(0, 100) animated:NO];
[self setPosition:CGPointMake(0, 150) animated:YES];
}
- (void)setPosition:(CGPoint)position animated:(BOOL)animated
{
[CATransaction begin];
if(animated) {
[CATransaction setDisableActions:NO];
[CATransaction setAnimationDuration:5];
} else {
[CATransaction setDisableActions:YES];
}
self.layerA.position = position;
[CATransaction commit];
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.viewA = [[UIView alloc] init];
self.viewA.backgroundColor = [UIColor darkGrayColor];
self.viewA.frame = CGRectMake(0, 30, 320, 300);
[self.view addSubview:self.viewA];
self.layerA = [CALayer layer];
self.layerA.backgroundColor = [UIColor redColor].CGColor;
self.layerA.anchorPoint = CGPointZero;
self.layerA.frame = CGRectMake(0, 0, 320, 100);
[self.viewA.layer addSublayer:self.layerA];
}
@end
你有沒有找到這個解決方案? – CharlieMezak 2013-03-29 18:37:14
不,不幸的是。 – 2013-03-30 19:07:25