Yukarı doğru kaydırmak için bir görüntü görünümü animasyon

bir görüntü görünümü yapmaya çalışıyorum ( logo aşağıda) 100 piksel yukarı doğru kaydırın. Bu kodu kullanıyorum, ancak hiçbir şey olmuyor:

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:3];
logo.center = CGPointMake(logo.center.x, logo.center.y - 100);
[UIView commitAnimations];

bu kod viewDidLoad yöntemindedir. Özellikle, logo.center = ... çalışmıyor. Diğer şeyler (alfa değiştirmek gibi) yapar. Belki de yukarı doğru kaydırmak için doğru kodu kullanmıyorum?

8
tarihinde sordu Josh Caswell 2013-01-07 07:14:35
kaynak

2 ответов

non-autolayout storyboards / NİBs için kodunuz iyi. Bu arada, genellikle blokları :

kullanarak animasyon tavsiye edilir
[UIView animateWithDuration:3.0
                 animations:^{
                     self.logo.center = CGPointMake(self.logo.center.x, self.logo.center.y - 100.0);
                 }];

veya seçenekler ve benzeri üzerinde biraz daha fazla kontrol istiyorsanız, şunları kullanabilirsiniz:

[UIView animateWithDuration:3.0
                      delay:0.0
                    options:UIViewAnimationCurveEaseInOut
                 animations:^{
                     self.logo.center = CGPointMake(self.logo.center.x, self.logo.center.y - 100);
                 }
                 completion:nil];

ancak autolayout kullanmıyorsanız kodunuz çalışmalıdır. Sadece yukarıdaki sözdizimi iOS 4 ve üstü için tercih edilir.

kullanıyorsanız autolayout, (a) dikey alan kısıtlamanız için IBOutlet yaratırsınız (aşağıya bakın) ve sonra (b)

gibi bir şey yapabilirsiniz
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    static BOOL logoAlreadyMoved = NO; // or have an instance variable

    if (!logoAlreadyMoved)
    {
        logoAlreadyMoved = YES; // set this first, in case this method is called again

        self.imageVerticalSpaceConstraint.constant -= 100.0;
        [UIView animateWithDuration:3.0 animations:^{
            [self.view layoutIfNeeded];
        }];
    }
}

bir kısıtlama için IBOutlet eklemek için, sadece kontrol - kısıtlamadan sürükleyin .H Yardımcısı editörü:

add IBOutlet for vertical constraint

bu arada, bir kısıtlamayı canlandırıyorsanız, sahip olduğunuz diğer kısıtlamalara duyarlı olun bu görüntü görüntüsüyle bağlantılı olabilir. Görüntünün hemen altına bir şey koyarsanız, resimle bağlantılı kısıtlamasına sahip olur, bu nedenle resminizle ilgili kısıtlamalarla başka kontrollere sahip olmadığınızdan emin olmanız gerekebilir (bunları taşımak istemiyorsanız).

eğer storyboard veya uç açarak autolayout kullanıyorsanız ve daha sonra "dosya denetçisi" (sağ üst panelde ilk sekme) seçerek, ya da basarak Yukarı çekebilirsiniz söyleyebilirim seçenek + komutu + 1 (Sayı "1")):

autolayout on

unutmayın, ön-iOS 6'yı desteklemeyi planlıyorsanız, "autolayout"u kapattığınızdan emin olun. Autolayout bir iOS 6 özelliğidir ve ios'un önceki sürümlerinde çalışmaz.

42
cevap Rob 2017-09-10 22:10:22
kaynak

u deneyin

logo.frame = CGRectMake(logo.frame.origin.x, logo.frame.origin.y - 100,logo.frame.size.width,logo.frame.size.height)
-1
cevap Patrick.Ji 2014-06-21 08:59:37
kaynak