Sanırım kendi animasyonunuzu oluşturmak istiyorsunuz. Geçen ay böyle bir şeyle oynadım. Çözümüm, mevcut görünüme bir üst görünüm olarak özel bir görünüm (belki bir denetleyiciden alınmış) ekliyordu. Bu da katmanlarla çalışır.
İlk önce, yukarıdaki kod örneğinizde yaptığınız gibi, görüntüyü "gelecekteki" veya "şimdiki" görünüm denetleyicinizden alırsınız. Normalde, içerik denetlenirken görünüm denetleyicilerinin içeriği kullanılabilir olmalıdır.
Şimdi resme sahipsiniz. Görüntünün manipülasyonu sizin tarafınızdan yapılmalıdır.
Resmi bir UIImageView'e ekleyin. Bu ImageView, alt görünüm veya katman olarak eklenebilir. Artık gerçek kullanıcı arayüzünüzü özgürce çizebileceğiniz bir katman var. Bazen katmanı hareket ettirmeniz veya etrafınıza bakmanız gerekir, böylece görüşünüzü mükemmel bir şekilde kaplar. Bu, görünüm ayarlarınıza bağlıdır. Tablo Görüntülemeleri ile ilgileniyorsanız, bir alt görünüm eklemek o kadar kolay değildir. Bu yüzden tabakayı daha iyi kullanın.
Tüm çalışmalar tamamlandıktan sonra, yeni görünüm denetleyicisini animasyon olmadan sunun, böylece hemen görünecektir.
İş tamamlandıktan sonra katmanı veya görünümü ana görünümden kaldırın ve temizleyin.
Bu karmaşık görünüyor, ancak yaptıktan sonra bunun için bir şablonunuz olduğunu. "WWDC 2011, Session 309 Arayüz Oluşturucu Hikâyeciliğinin Tanıtımı" adlı Apple'da, tam olarak ne yapmak istediğinize dair bir mekanizma bulacağınız 'özel seğmenler' tanıtıldı. Aşağıdaki kod, eski bir projeden kesilmiştir ve bir şekilde dağınıktır ve temizlenmelidir. Ancak bu prensibi göstermek için aşağıdakiler çalışmalıdır:
-(void) animate {
static LargeViewController* lvc = [[LargeViewController alloc] init];
UIGraphicsBeginImageContextWithOptions(self.bounds.size, view.opaque, [[UIScreen mainScreen] scale]);
[lvc.view.layer renderInContext:UIGraphicsGetCurrentContext()];
// Create a ImageView to display your "zoomed" image
static UIImageView* displayView = [[UIImageView alloc] initWithFrame:self.view.frame];
static UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// Add your image to the view
displayView.image = img;
// insert the view above your actual view, adjust coordinates in the
// frame property of displayView if overlay is misaligned
[[self.view] addSubview:displayView];
// alternatively you can use the layer
// [self.view.layer addSublayer:displayView.layer];
// draw the imageView
[displayView setNeedsDisplay];
// do something in background. You may create your own
// construction, i.e. using a timer
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSDate *now = [NSDate date];
NSTimeInterval animationDuration = 3.;
NSTimeInterval t = -[now timeIntervalSinceNow];
while (t < animationDuration) {
t = -[now timeIntervalSinceNow];
// Do some animation here, by manipulation the image
// or the displayView
// <calculate animation>, do something with img
// you have exact timing information in t,
// so you can set the scalefactor derived from t
// You must not use an UIImage view. You can create your own view
// and do sth. in draw rect. Do whatever you want,
// the results will appear
// in the view if you added a subview
// or in a layer if you are using the layer
dispatch_sync(dispatch_get_main_queue(), ^{
// display the result
displayView.image = img;
[displayView setNeedsDisplay];
});
}
});
// now the animation is done, present the real view controller
[self presentModalViewController:lvc animated:NO];
// and clean up here
}
Sonunda, çok detaylı önerilerinizi test etmek için zamanımız oldu. ÇALIŞIYOR bir cazibe gibi! Girişiniz için çok teşekkürler! Ve ayrıca, özel sekeller ile WWDC 2011 oturumu 309 da harika çalıştı. –