2010-12-26 14 views
9

Buduję scenę z Core Animation, która wygląda podobnie do wygaszacza ekranu na starym telewizorze Apple. Ciągły strumień obrazów (każdy z nich CALayer) przechodzi pionowo, od dołu do góry. Aby to osiągnąć, animacja warstwy kończy się, gdy zniknie z widoku, zostaje przesunięta z powrotem na dół, przypisana do nowego obrazu i ponownie aktywowana. Odbywa się to metodą delegata animationDidStop. Zauważyłem jednak, że jeśli zrobię zrzut ekranu podczas uruchamiania aplikacji na iPadzie, warstwy nigdy nie zostaną przeniesione na spód i nie będą ponownie widoczne. Wyizolowałem problem i jestem pewien, że powoduje to zrzuty ekranu. Prowadzi mnie to do wniosku, że zrobienie zrzutu ekranu ma wpływ na czas animacji. Więc ...Zrzut ekranu z animacją rdzenia na iPadzie

  1. Jaki wpływ ma animacja na zrzut ekranu na iDevice?
  2. Czy istnieje lepszy sposób osiągnięcia tego efektu?
+0

Jakiej metody używasz do zrzutu ekranu? Przycisk uśpienia + Home lub Xcode Organizer lub 'UIScreenGetImage()'? –

+0

Używam przycisku uśpienia i przycisku Home na urządzeniu. Próbowałem przechwycenia ekranu z Xcode i nie było problemu. Mając to na uwadze, zaczynam myśleć, że problem ma coś wspólnego z białą animacją "flash" podczas robienia zrzutu ekranu na urządzeniu. – David

+1

W swojej metodzie "-animationDidStop:" wykonujesz te same czynności w zależności od tego, czy animacja została zakończona czy nie? Może animacja jest oznaczona jako niezakończona po zrobieniu zrzutu ekranu. – Kemenaran

Odpowiedz

1

Zawsze można spróbować przechwycić zrzut ekranu programowo w oparciu o zawartość widoku, a następnie zapisać go jako zrzut ekranu. Nie znam twoich obiektów, ale to właśnie zrobiłem wcześniej. Cała zawartość mojego zrzutu ekranu to CaptureView.

CGRect screenRect = [[UIScreen mainScreen] bounds]; 
UIGraphicsBeginImageContext(CaptureView.frame.size); 

CGContextRef ctx = UIGraphicsGetCurrentContext(); 
[[UIColor clearColor] set]; 
CGContextFillRect(ctx, screenRect); 

[CaptureView.layer renderInContext:ctx]; 

UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIImageWriteToSavedPhotosAlbum(screenImage, nil, nil, nil); 
UIGraphicsEndImageContext(); 

Czy twoja animacja jest nieruchoma UIImageView? Jeśli jest to widok obrazu, który chcesz wykryć, wychodząc z ekranu, po prostu użyj jego frame.origin.y w porównaniu do 0.

0

Możesz użyć presentationLayer, aby zrobić zrzut ekranu podczas animacji. , tj. [CaptureView.layer presentationLayer]

można również wykryć dotyk podczas animowania w presentationLayer of CALayer.