Filmed by Thomas Edison in 1894, this 48-frame blockbuster was the first movie to be copyrighted. Don’t miss the two sequels, Fred Ott Holding a Bird and Electrocuting an Elephant.
As in
Gone,
the view controller uses the
bundle object
to create a
URL
leading to the media file.
The URL is then plugged into a
MPMoviePlayerController
.
(Despite is name, the
MPMoviePlayerController
is not a
view
controller.
But a
MPMoviePlayerController
does have all the methods of protocol
MPMediaPlayerPlayback
object.)
The
MPMoviePlayerController
has a
view
in which it can show a video.
When our button is pressed,
touchUpInside:
adds
the
MPMoviePlayerController
’s
view
to the big white
View
,
covering it up entirely.
When the playback is
finished,
the
MPMoviePlayerController
’s
view is
removed
from the big white
View
.
AppDelegate
:
unchanged.
ViewController
.
The view controller
creates the
MPMoviePlayerController
,
starts it
playing,
and eventually receives the
MPMoviePlayerPlaybackDidFinishNotification
from it.
View
.
This big white view is
removed
from the window when the movie starts to play,
and is
put
back into
the window when the movie is finished.
sneeze.m4v
Go to the
Library of Congress,
get the file
0026A.mov
where it says “Quick Time format”,
download it to your Mac.
I chose
.mov
format because it was on the list of
supported
formats.
But to get the file to play in an iPhone app,
I had to convert it from
.mov
to
.m4v
.
Control-click on the file,
Open With QuickTime Player,
File → Save As…
Save As: sneeze.m4v
Format: iPhone
Save
To verify that the
0026A.mov
file was downloaded safely,
and successfully converted to m4v,
type command-i (the Get Info command) on
sneeze.m4v
and see if the Preview section (under Open with) will play the video.
Also open a
Terminal
window and use the
file
program to determine what type of file
0026A.mov
is.
cd to the directory that holds 0026A.mov file 0026A.mov 0026A.mov: Apple QuickTime movie (fast start) file sneeze.m4v sneeze.m4v: ISO Media, MPEG v4 system, iTunes AVC-LC
If the video file is damaged, the
MPMoviePlayerController
will print an
_itemFailedToPlayToEnd:
message.
Put
sneeze.m4v
on your Macintsh Desktop and make sure you can play it.
Then drag the file
into the Supporting Files folder in the Xcode Project Navigator.
Choose options for adding these files:
Destination ☑ Copy items if needed
Add to targets: ☑ Video
Finish
Select the
Video
project at the top of the Project Navigator.
At the top of the center panel of Xcode, select Build Phases.
Make sure
sneeze.m4v
is listed under Copy Bundle Resources.
I converted a You Tube video to
.mp4
format with
ixconverter.
Paste in the URL of the video in front of the yellow CONVERT button
and press the button.
The app
Eyre.zip
plays a You Tube video (with sound).
MPMovieScalingMode
you specified for it.
Give the
MPMoviePlayerController
a green background color.
Insert the following code
into the
init
method of the
view
controller
immediately after we set the
MPMoviePlayerController
’s
controlStyle
.
//Give the moviePlayerController a green background. moviePlayerController.backgroundView!.backgroundColor = UIColor.greenColor();
init
method of the
view
controller
after the call to
prepareToPlay
.
let label: UILabel = UILabel(frame: CGRectZero); label.text = " My hovercraft is full of eels. "; let font: UIFont = UIFont.systemFontOfSize(UIFont.labelFontSize()); label.frame.size = label.text!.sizeWithAttributes([NSFontAttributeName: font]); let b: CGRect = moviePlayerController.view.bounds; //Center the label along the bottom edge of the moviePlayerController's view. label.center = CGPointMake( b.origin.x + b.size.width / 2, b.origin.y + b.size.height - 3.2 * label.frame.size.height); //Keep the label along the bottom edge of the moviePlayerController's view. label.autoresizingMask = UIViewAutoresizing.FlexibleLeftMargin | UIViewAutoresizing.FlexibleRightMargin | UIViewAutoresizing.FlexibleTopMargin; label.backgroundColor = UIColor.clearColor(); label.textColor = UIColor.yellowColor(); label.textAlignment = NSTextAlignment.Center; moviePlayerController.view.addSubview(label);
playbackDidFinish
is usually called because we have reached the end of the video file.
In this case, we get no output from the
print
s.
But what is the output if you press the Done button
in the upper left corner of the movie’s controls?
Note that 2 is the value of
MPMovieFinishReason.UserExited
.
MPMoviePlayerController
is prepared to play the movie.
Add the following method to the
view
controller.
func isPreparedToPlayDidChange(notification: NSNotification) { assert(notification.object as MPMoviePlayerController == moviePlayerController, "isPreparedToPlayDidChange: \(notification.object) != \(moviePlayerController)"); if moviePlayerController.isPreparedToPlay { print("moviePlayerController.naturalSize = \(moviePlayerController.naturalSize)"); } }Add the following statement to the
init
method of the
view
controller
immediately above the existing call to
addObserver(_:selector:name:object:)
.
center.addObserver(self, selector: "isPreparedToPlayDidChange:", name: MPMediaPlaybackIsPreparedToPlayDidChangeNotification, object: moviePlayerController);
moviePlayerController.naturalSize = (320.0,240.0)Can you change the size of the
MPMoviePlayerController
to its natural size?