インジケーターを表示する「DCActivityIndicator」クラス改訂版

iOSのアクティビティインジケーターを制御する「DCActivityIndicator」クラスで、背景にオーバーレイを表示できるよう改訂しました。startメソッドの showOverlayパラメータに YESを渡すと、半透明のオーバーレイが表示されます。

このクラスでは、アクティビティインジケーターのアニメーション再生/停止/再生状況の取得を行えます。

下記よりサンプルとソースコードのダウンロードが行えます。

ダウンロード

使用方法

アクティビティインジケーターのアニメーション再生

1
2
3
4
5
[DCActivityIndicator start:self.view
                    center:self.view.center
                   styleId:GRAY
          hidesWhenStopped:YES
               showOverlay:YES];

アクティビティインジケーターのアニメーション停止

1
[DCActivityIndicator stop];

アクティビティインジケーターのアニメーション再生状況取得

1
2
3
4
if ([DCActivityIndicator isAnimating]) {
    //アニメーション再生中の処理

}

ソースコード

DCActivityIndicator.h

1
2
3
4
5
6
7
8
9
10
11
12
13
#import <UIKit/UIKit.h>

#define INDICATOR_LARGE_SIZE 50
#define INDICATOR_SMALL_SIZE 20

@interface DCActivityIndicator : UIActivityIndicatorView

#pragma mark - public method
+ (void)start:(id)view center:(CGPoint)center styleId:(NSInteger)styleId hidesWhenStopped:(BOOL)hidesWhenStopped showOverlay:(BOOL)showOverlay;
+ (void)stop;
+ (BOOL)isAnimating;

@end

DCActivityIndicator.m

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#import "DCActivityIndicator.h"

@implementation DCActivityIndicator

static UIActivityIndicatorView *indicator_;
static UIView                  *overlay_;
static BOOL                    showOverlay_;

typedef NS_ENUM(NSUInteger, styles) {
    GRAY        = 1,
    WHITE       = 2,
    WHITE_LARGE = 3
};

// アニメーション開始
+ (void)start:(id)view center:(CGPoint)center styleId:(NSInteger)styleId hidesWhenStopped:(BOOL)hidesWhenStopped showOverlay:(BOOL)showOverlay
{
    // インジケーター初期化
    DCActivityIndicator.indicator = [[UIActivityIndicatorView alloc] init];

    // スタイルを設定
    switch (styleId) {
        case GRAY:
            DCActivityIndicator.indicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
            break;
        case WHITE:
            DCActivityIndicator.indicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite;
            break;
        case WHITE_LARGE:
            DCActivityIndicator.indicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;
            break;
    }

    // スタイルに応じて寸法変更
    if (DCActivityIndicator.indicator.activityIndicatorViewStyle == UIActivityIndicatorViewStyleWhiteLarge) {
        DCActivityIndicator.indicator.frame = CGRectMake(0, 0, INDICATOR_LARGE_SIZE, INDICATOR_LARGE_SIZE);
    } else {
        DCActivityIndicator.indicator.frame = CGRectMake(0, 0, INDICATOR_SMALL_SIZE, INDICATOR_SMALL_SIZE);
    }

    // 座標をセンターに指定
    DCActivityIndicator.indicator.center = center;

    // 停止した時に隠れるよう設定
    DCActivityIndicator.indicator.hidesWhenStopped = hidesWhenStopped;

    // インジケーターアニメーション開始
    [DCActivityIndicator.indicator startAnimating];

    // オーバーレイ表示フラグ保持
    showOverlay_ = showOverlay;

    // オーバーレイ表示
    if (showOverlay_) {
        CGSize screenSize = [[UIScreen mainScreen] bounds].size;
        overlay_ = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, screenSize.width == 320 && screenSize.height == 568 ? 568 : 480)];
        overlay_.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5f];
        [view addSubview:overlay_];
    }

    // 画面に追加
    [view addSubview:DCActivityIndicator.indicator];
}

// アニメーション停止
+ (void)stop
{
    if (showOverlay_) {
        [overlay_ removeFromSuperview];
    }
    [DCActivityIndicator.indicator stopAnimating];
}

// アニメーション中であるか
+ (BOOL)isAnimating
{
    return [DCActivityIndicator.indicator isAnimating];
}

+ (void)setIndicator:(UIActivityIndicatorView *)indicator
{
    indicator_ = indicator;
}

+ (UIActivityIndicatorView *)indicator
{
    return indicator_;
}

@end

お薦めの参考書

Swiftポケットリファレンス
Swiftの基本的な使い方から、データ処理やネットワーク処理の応用まで、逆引き形式で調べられる良書です。サンプルコードも Webからダウンロード出来、とても便利です。内容としては中級者向けですが、手元にあれば安心の一冊です。

   このエントリーをはてなブックマークに追加

About

Masaki Hirokawa (@dolice_apps)

デザインエンジニア 廣川政樹の開発ブログ。Objective-Cや Javaなど iPhone/Androidアプリ開発に関する技術情報を掲載しています。

iPhone apps

  • リラックス・ヒーリング(無料)
  • 望みが叶う!引き寄せの法則アプリ(無料)
  • ミステリー - 怖い話や不思議な体験、都市伝説まとめ
  • 浮世絵壁紙 - 美しい日本画ギャラリー(無料)
  • 綺麗な壁紙HD iPhone 7/7 Plus/SE & iPod対応(無料)
  • クールな壁紙HD iPhone 7/7 Plus/SE & iPod対応(無料)

Android apps

  • 浮世絵壁紙 - 美しい日本画ギャラリー
  • 綺麗な高画質壁紙

Objective-C Classes

Tag Cloud

ActionScript(9) ActionScript3(7) Ad(4) Adfurikun(2) AdMob(9) Android(10) Animation(17) AppDelegate(3) ARC(1) ArrayList(1) AVAudioPlayer(4) AVAudioSession(1) AVFoundation(3) Banner(2) Bitmap(1) Camera(4) CGAffineTransform(4) CGBlendMode(2) CGContextRef(1) CGImageRef(1) Classes(44) CLLocationManager(1) ConnectivityManager(1) ContentResolver(1) CoreLocation(2) Delegate(3) Device(7) Display(1) DisplayMetrics(1) Download(101) Facebook(6) Foundation(72) Framework(2) Google Analytics(1) Handler(1) iAd(6) ImageView(1) In-AppPurchase(1) iOS(12) iOS 7(15) iOS 7.1(3) iOS 8(1) iPad(7) iPhone(21) iPhone 6(4) Java(7) JavaScript(2) LINE(4) Localize(1) Magazine(1) MediaStore(1) MFComposeViewController(1) Nend(1) NetworkInfo(1) NSArray(23) NSCalendar(3) NSData(2) NSDate(7) NSDateComponents(2) NSDateFormatter(2) NSDictionary(12) NSEnumerator(1) NSIndexSet(1) NSInteger(6) NSMutableArray(17) NSMutableDictionary(5) NSMutableOrderedSet(7) NSMutableString(4) NSMutableURLRequest(1) NSNotificationCenter(1) NSNumber(1) NSObject(1) NSOrderedSet(7) NSRange(2) NSSelectorFromString(1) NSSet(6) NSString(19) NSTimer(4) NSTimeZone(1) NSURL(7) NSURLConnection(1) NSURLRequest(2) NSUserDefaults(7) NSXMLParser(2) Objective-C(222) PHP(1) Products(14) QuartzCore(3) RSS(2) Runnable(1) Sample(51) Screensaver(9) SDK(2) ShareCompat(1) Social(10) StoreKit(1) Twitter(6) UIAccelerometer(3) UIActionSheet(1) UIActivityIndicator(1) UIActivityIndicatorView(3) UIActivityViewController(1) UIAlertView(5) UIApplication(7) UIButton(4) UIColor(3) UIDatePicker(5) UIDevice(6) UIDeviceOrientation(1) UIEvent(6) UIImage(15) UIImagePickerController(4) UIImageView(12) UIKit(58) UILabel(7) UINavigationBar(4) UINavigationItem(1) UIPasteboard(4) UIScreen(1) UIScrollBar(1) UIScrollView(1) UISlider(3) UIStoryboardSegue(3) UISwitch(1) UITabBar(3) UITableView(4) UITextField(2) UIView(11) UIViewAnimationTransition(1) UIViewController(4) UIWebView(5) WindowManager(1) Xcode(48) Xcode 5(8) Xcode 5.1(2)