スライドショーのフルスクリーン化(1)

2010. 06. 15
基礎からのiPhone SDK 改訂版』の『スライドショーの作成』で作ったスライドショーアプリケーションをフルスクリーン化(ステータスバーとツールバーの非表示化)します。

イメージビューをタップするとフルスクリーンをON/OFFし、ダブルタップするとスライドショーのSTART/STOPします。


●イメージビューのサブクラスの作成

UIImageViewにはアクションが設定できないので、オーバーライドしてサブクラスでイベント処理を追加します。

XcodeでUIImageViewのサブクラスとして、UITouchableImageViewという名前のファイルを作ります。

『グループとファイル』ペインの『Classes』を右クリックして、『追加』→『新規ファイル...』を選択します。

新規ファイルのテンプレートで左側ペインの『iPhone OS』下の『Cocoa Touch Class』を選択、右上ペインの『Objective-C class』を選択し、右下ペインの『Subclass of』で『UIView』をプルダウンメニューから選びます。

423

次へ進んで、ファイル名を『UITouchableImageView』とします。


●UITouchableImageView.hヘッダファイルの編集

続いて、生成したUITouchableImageViewのヘッダファイルを編集します。
(太字が追加した部分)

#import <UIKit/UIKit.h>
#import "Slide.h"

@interface UITouchableImageView : UIImageView {
    NSUInteger tapCount;    // タップカウント
    IBOutlet Slide *slide;    // Slideへのアウトレット
}

@end

431

まず、イメージビューをタップした時に実際に対応するメソッドはSlideクラスにあるので、Slide.hをインポートします。

新規ファイルのテンプレートでサブクラスをUIImageとしましたが、実際にはUIImageViewなので、クラス宣言の@interfaceのスーパークラスをUIImageからUIImageViewに変更します。

tapCountはタップ数を一時的に保持し、フルスクリーンのON/OFFと、スライドショーのSTART/STOPの振り分けに使用します。

前述の通り実処理をSlideクラスで行うので、アウトレットとしてslideを設定しています。

ヘッダファイルの編集が終わったら保存し、ResourcesのMainWindow.xibをダブルクリックしてnibファイルの編集をします。


●nibファイルの編集

本書では『Interface Builder上で接続も行ってください』の一言で済まされていますが、サンプルコードを見ても悩んでしまったので、細かく説明します。

Documentウィンドウを開くと下図のようになっています。

426

最初にUIImageViewクラスのイメージビューを、UITouchableImageViewに変更します。

DocumentウィンドウでImage Viewを選択した状態で、InspectorウィンドウのIdentityパネル、『Class Identity』の『Class』プルダウンメニューから『UITouchableImageView』を選択します。

427

そうするとDocumentウィンドウは下図のようになります。

428

次にDocumentウィンドウでSlideを右クリックしてConnectionsパネルを開きます。

429

『Referencing Outlets』の『slide App Delegate』右側の◉をクリックして、Viewウィンドウのイメージビュー、もしくはDocumentウィンドウのTouchable Image Viewに接続します。

430

続いてTouchable Image ViewのAttributesを編集します。

ViewのModeとDrawing、Interactionが、デフォルトとサンプルコード、本書の内容が異なっています。

デフォルトの内容は下図のようになっています。

432

サンプルコードの内容は下図のようになっています。

433

各コードの差異は下表のようになります。

View  デフォルトサンプル
コード
本書今回の
設定
MediaScale To Fillアスペクトを無視して拡大   
Aspect Fillアスペクトを保持して拡大
(余白無し) 
 
DrawingOpaque背景を不透明にする   
Clear Context
Before Drawing
描画前に内容をクリアする   
Clip Subviewsサブビューをクリッピングする  
Autoresize Subviewsサブビューを自動リサイズする
InteractionUser Interaction
Enabled
ユーザ操作を有効にする 
Multiple Touchマルチタッチを有効にする   

Mediaはアスペクトを保持して拡大したいので、Aspect Fillにします。
(余白が出てもいいので全体を表示したい場合は、Aspect Fitを選択して下さい)

DrawingのOpaqueは、不透明にするかどうかで、アニメーションなどで透明度を変化させる必要がなければ、チェックを入れておいた方が描画が速くなると何処かで読んだ記憶があります。
(うろ覚えですが)

今回はサンプルコードと本書の双方でチェックが外れているので、外しておきます。

Clear Context Before Drawingは事前の描画内容をクリアしてから、次の描画をするかどうかのチェックですが、今回はあまり関係がない(この状態でも動作に影響しない)ので外しておきます。

Clip Subviewsは、サブビューがはみ出る場合に範囲内に納めるものなので、チェックしておいた方がいいのかも。

※2010.8.7補足
サブビューが親ビューからはみ出ている場合、はみ出た部分は縮小されるのではなく、カットオフされるようです。
また、チェックするとカットオフの為の余計な演算が入ることになるので、通常はデフォルトのままチェックを入れない方が良さそうです。

User Interaction Enabledは、そのためにサブクラスとして実装しているので、当然チェックします。

Multiple Touchは、本書中で今回は必要無いとしていますのでチェックしません。

434



参考文献

基礎からのiOS SDK基礎からのiOS SDK
(2010/10/09)
鶴薗 賢吾、松浦 健一郎 他

商品詳細を見る






Wave SoundTouch music system IV
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
06 | 2017/07 | 08
Sun Mon Tue Wed Thu Fri Sat
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

Wave SoundTouch music system IV
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR