iOS5-uutuus: UIPagingViewController

iOS5:n mukana tuli uusia mahdollisuuksia muokata valmiiden komponenttien ulkoasua. Lisäksi sovelluskehittäjille tuli tarjolle kokonaan uusia komponentteja. Vaikka nämä komponentit eivät toimi vanhemmilla versioilla, jossakin vaiheessa on perusteltua vaatia käyttäjiltä iOS5-versiota sovelluksen asentamiseksi tai päivittämiseksi. Jo nykyäänkin jotkin sovellukset vaativat toimiakseen iOS5-version – etunenässä Applen omat sovellukset.

Esittelenkin nyt teille uuden komponentin nimeltään UIPagingViewController, joka lisää samanlaisen sivunvaihtoefektin kuin iBooks-applikaatiossa on ollut käytössä alusta asti. Kuvankaappaus lopputuloksesta näkyy kuvassa 1.

Lopputulos

Continue reading iOS5-uutuus: UIPagingViewController

iPhonen animaatiot blockeilla

iPhone iOS 4:sen mukana tuli mahdollisuus käyttää block-objekteja, asiasta on aikaisemmin kirjoittanut Pertti. Lähestyn asiaa aloittelija ystävällisesti ja kerron kuinka blockkeja voi käyttää näkymien liikutteluun.

Luo uusi projekti (tähän esimerkkiin riittää single view application). Lisää .xib-tiedostoon yksi nappi ja yksittäinen view (kuvassa sininen neliö). Viewlle teet IBoutletin, jotta voit käskyttää sitä koodistasi. Lisää vielä nappulaan IBAction, joka laukaisee animaation nappulaa painettaessa. Tässä esimerkissä block-animaatiota käytetään näkymän (view) liikutteluun ruudulla ja palauttamiseen takaisin alkuasemaan, mutta yhtä hyvin näkymällä voitaisiin tehdä muita efektejä, kun häivyttäminen (alpha 1 -> alpha 0) tai vaikka näkymän koon kasvattaminen vaihtamalla näkymän framen kokoa.

Animaatio taikatemppu tapahtuu seuraavanlaisesti  kahdella sisäkkäisellä block-animaatiolla, joista jälkimmäinen palauttaa liikutetun view:n takaisin paikoilleen:

-(void)animateView{
   //last animation has not completed
   if(!isAnimating){

        isAnimating = YES;
        [UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
                CGRect animateViewXY = animateView.frame;
                animateViewXY.origin.y = animateViewXY.origin.y + 100;
                [animateView setFrame:animateViewXY];
        }
        completion:^(BOOL finished){
            [UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
            [animateView setFrame:animateViewOriginalFrame];
        }
            completion:^(BOOL finished){
                //animation is complete, we are ready to do it again
                isAnimating = NO;
            }];
        }];
   }
}

Jos yllä olevasta koodista, jättää pois animaatiot ympyröivän bool checkkauksen, voi animaatiota klikkailla käyntiin uudestaan ennen kuin edellinen on päässyt loppuunsa.

Lataa koko lähdekoodi tästä : AnimationBlock.