Showing posts with label MPMoviePlayerController. Show all posts
Showing posts with label MPMoviePlayerController. Show all posts

Tuesday, July 27, 2010

MPMoviePlayerController vagy MPMoviePlayerViewController

Oliver Drobnik: The 3.2 Hurdle of MPMoviePlayerController

John Muchow: Getting MPMoviePlayerController to Work with iOS4, 3.2 (iPad) and Earlier Versions of iPhone SDK

MPMoviePlayerController Class Reference

Friday, January 15, 2010

MPMoviePlayerController vezerlese - megoldas

Tovabbra is az a lenyeg, hogy MPMoviePlayerController-rel le tudjak jatszani egymas utan tobb movie-t es a "previous" "next" gombokkal tudjak valtogatni kozottuk valamint a Done gombra alljon le.

Volt tobb rosz megoldasom:
-megneztem, hogy MPMoviePlayerPlaybackDidFinishNotification-ben meg tudom-e allapitan miert lett vege, de erre a 3.1.2-ben nincs lehetoseg (ugyanugy kuldi a notification-t, ha vege van a movie-nak, vagy ha a megnyomta a user a done, "prev", "next" gombok valamelyiket)
-Probaltam atlatszo UIButton-okkal letakarni ezeket a gombokat es a sajat gombjaim megnyomasat lekezelni, de ez sem jo, mert a default controlok eltunnek/megjelennek es errol sincsen semmi ertesites.
-Felmerult, hogy csupa sajat UIView-val megcsinalni, ami egyreszt nem lett volna tul szep, masreszt a timeline es a volume control gondot okozott volna.

Vegul ezt a megoldast talaltam (ami egyreszt nem menne at valoszinuleg az app store-on, masreszt a kovetkezo SDK-val valtozhat is. 3.1.2-vel probaltam):

Tovabbra is felteszem az osszes controlt az MPMoviePlayerController-re (MPMovieControlModeDefault), majd igy ferek hozzajuk a UIWindowDidBecomeKeyNotification-ra feliratkozva. (Eloszor a MPMoviePlayerContentPreloadDidFinishNotification-t akartam hasznalni, de az nem volt jo. Elsore ezt nem is vettem eszre, mert az elso movie betoltesenel eloszor a keyWindow notificaton jott meg es utana a preloadDidFinish, viszont a masodik play-nel mar forditva.):

id internal;

object_getInstanceVariable(player, "_internal", (void *)&internal);

id videoViewController;

object_getInstanceVariable(internal, "_videoViewController", (void*)&videoViewController);

UIView *overlayView = [videoViewController _overlayView]; //MPFullScreenVideoOverlay


Ennek a UIView-nak pedig a subview-it siman le lehet kerni amik nagyjabol igy neznek ki. Azert nagyjabol, mert subviews egy NSArray-t ad vissza amiben az elemek sorrendje nem kotott. Azt figyeltem meg, hogy az MPFullScreenVideoOverlay-nek ha lekerem a subview-it akkor az mindig ugyanabban a sorrendben jott vissza /MPFullScreenTransportControls, NPCenteringNavigationBar/ es meg az MPFullScreenTransportControls subview-it lekerve is ugyanaz volt a sorrend /play, next, previous/, de az NPCenteringNavigationBar-nal az elso video betoltesenel UINavigationButton, UIView volt a sorrend, de a masodiknal mar pont forditva. Tehat ha subview-kat kerunk le egy NSArray-ba, akkor ne hagyatkozzunk a sorrendre, mert nem mi raktuk ossze!!!

Tehat ha igy a kezunkben van peldaul a "next" gomb, akkor arra ra is kothetjuk a sajat targetaction-unket a UIControlEventTouchUpInside-ra. Nem art elott lekotni rola a defult action-t:

[nextButton removeTarget:fstc action:nil forControlEvents:UIControlEventTouchUpInside];

[nextButton addTarget:self action:@selector(nextButtonClicked:) forControlEvents:UIControlEventTouchUpInside];


Aztan persze meg kell irni a sajat nextButtonClicked methodunkat is (meg a tobbi gombet is) amiben ha van meg lejatszando movie-nk akkor release-eljuk az MPMoviePlayerController-t majd csinalunk egy ujat a kovetkezo movie-val.>

Wednesday, January 6, 2010

MPMoviePlayerController "Previous" es "Next" button-jainak letakarasa.

Amig nem talalok megoldast ez elozo problemara, addig ugyanugy letakarom 1-1 UIButton View-val a "previous" es "next" (nem tudom mi a hivatalos nevuk) buttont, mint ahogy a Done buttonnal tettem, a minimalis CGRect pedig amivel le lehet takarni az a (36, 122, 63, 71) es a (36, 287, 63, 71) azaz a (36,122) es (99, 193) illetve a (36, 287) es (99, 358) kozotti terulet.
Igy nez ki, ha lathatova tesszuk:

UPDATE: Ez csak szimulatorban igaz, mert ott nem latszik a volume control. Az igazi device-on mashol van. Amugy sem az igazi megoldas ez, mert az overlay gombok akkor is ott lesznek, ha amugy a Default control-ok nem latszanak. Arra sajnos nincs lehetoseg, hogy megtudjuk eppen latszanak-e lejatszas kozben a default control-ok. Valoszinuleg az lesz a legjobb, ha az MPMovieControlModeHidden-re allitam es megcsinalom a sajat "Done", "Next", "Previous" controljaimat es esetleg meg egy mindig lathato controlt ami elrejti/megmutatja a tobbit. Ezzel csak az a baj, hogy igy sajat timeline control kene, amit meg nem tudom hogyan lehetne megcsinalni.

Thursday, November 26, 2009

MPSwipableView, MPFullScreenVideoOverlay

Amikor az MPMoviePlayerController csinal egy sajat window-t ami a keyWindow lesz, akkor ennek egy subView-ja van es az egy MPSwipableView amirol nem talaltam sok mindent, csak annyit, hogy UIView-bol oroklodott es az MPFullScreenVideoOverlay az o leszarmazottja, de ezek nem dokumentalt view-k.

Tuesday, November 24, 2009

MPMoviePlayerController Done button-janak letakarasa.

Eloszor is az [MPMoviePlayerController Play] csinal egy sajat window-t, tehat a UIButton-t amivel le fogjuk takarni a Done buttont azt a keyWindowChanged notification-ben kell letrehozni.

Azt gondolnank, hogy egy akkora gombot kell rarakni mint amekkoranak ot latjuk, de valojaban a minimalis biztos megoldas ha a UIButton frame-je (256, 5, 43, 49)-es frame lesz. Ez igy fog kinezni ha lathatova tesszuk:

Meg kozelebbrol igy nez ki:
Lathato, hogy a szurke sav tetjebol igy nincsen letarkva egy pixelnyi ami mar nem baj, de ha egy pixellel alacsonyabb lenne a takaras, akkor mar valahova C betu aljara bokve megkapna a Done button az event-et.
Eleg furcsa igy ez a (256, 5, 43, 49) CGRect. Szebb lenne mondjuk egy (255, 5, 45, 50)-es, ami szinten jo. A lenyeg, hogy a (256, 5) es a (299, 54) pontok es az alltaluk hatarolt resz le legyen takarva. Legalabbis 3.1.2-es OS-nel igy lehet letararni a Done button-t.
Erdekes egyebkent, hogy ha nincsn letakrava akkor nyugodtan lehet mondjuk a Carrier feliratot is nyomni a Done button folott ugy is megkapja a Done button az eventet, ugyanakkor nem kell odaig letakarni. Nem tudom hogy van ez a gomboknal, de nagyon ugy tunik, hogy nem pont azt a reszt fedik le ami latszik beloluk, hanem valamivel tobbet.

Friday, November 20, 2009

overlay View az MPMoviePlayerController-en

Az [MPMoviePlayerController play] utan csinal egy sajat window-t ami a sharedApplication keyWindow-ja lesz, azaz ezen kell meghvini az addSubview-t, viszont fontos, hogy megvarjuk mire valoban ez lesz a keyWindow. Ezt ugy tehetjuk meg, hogy a play elott feliratkozunk a UIWindowDidBecomeKeyNotification notification-re es abban adjuk hozza a sajat UIView-(i)nkat a keyWindow-hoz (ami a [notfication object]).