2013-10-09 170 views
1

我一直在苦苦掙扎很久,我只是無法找到這裏出了什麼問題。我確實有一個想法 - 我認爲我添加並試圖進行動畫製作的視圖還沒有包含到視圖層次結構中,這就是爲什麼核心動畫不會浪費週期來進行動畫製作。我在項目中成功完成了其他一些動畫,但是我在ViewController的viewDidLoad方法中運行它們。這裏是我的代碼:UIView動畫立即完成

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     self.opaque = NO; 
     self.backgroundColor = [UIColor colorWithWhite: 1.0 alpha: 0.7]; 
     [self addTrack]; 
    } 
    return self; 
} 

- (void)addTrack 
{ 
    //init the track here 
    UIView *track = [[UIView alloc] initWithFrame: CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height)]; 
    track.backgroundColor = [UIColor whiteColor]; 
    [self addSubview: track]; 

    //transform the track for its initial scale 
    float scaleFactorX = 0.01; 
    track.layer.anchorPoint = CGPointMake(0, 0); 
    track.layer.position = CGPointMake(0, 0); 
    track.transform = CGAffineTransformMakeScale(scaleFactorX, 1.0); 

    //animate the track here 
    [UIView animateWithDuration:8 delay:0.3 options:UIViewAnimationOptionCurveEaseOut 
        animations:^{ 
         NSLog(@"animation is running."); 
         track.transform = CGAffineTransformIdentity; 
        } 
        completion:^(BOOL finished) { 
         NSLog(@"animation finished."); 
        }]; 
} 

所以結果是「軌道」是立刻縮放到原來的大小。我也嘗試在didMoveToSuperview方法內部調用addTrack,這樣我就可以確保包含視圖被添加到視圖層次結構中,但結果相同。我嘗試了其他類動畫,比如在包含視圖中添加了alpha動畫,但沒有再次成功。

回答

4

嘗試在加載視圖後調用動畫,以便您可以看到它。

-(void)viewDidAppear:(BOOL)animated 
{ 
    [self addTrack]; 
} 
+0

這是一個* UIViewController *的方法,我想在我的視圖中運行動畫.. –

+0

只是嘗試運行... – preetam

+0

是的,這一個解決了它謝謝。但這不是我真正想要的,我的意思是我想在包含類中啓動動畫。沒關係,我現在就離開它,希望我找到另一種解決方案。 –

1

您不應該在init方法中將動畫放入。嘗試在您的視圖實際顯示(在超級視圖中添加)後立即調用它們,然後查看會發生什麼。

+1

如上所述,我嘗試在* didMoveToSuperview *方法內部調用* addTrack *,並在* willMoveToSuperview *內部,這就是您的意思,但我沒有真正改變。 –

+0

從視圖外部,從另一個類中調用方法[add track],不在其中,這就是我的意思。 –