4種類の機能を搭載する「DCImage」クラス

「イメージビューの生成」や「全画面画像の取得」、「マスク適用」に「リサイズ処理」など4種類の機能を実装する「DCImage」クラスを作成しました。

全画面画像を取得する部分では、「DCDevice」クラスを使用しています。デバイス情報を判別し、解像度別に用意した画像を読み込む機能ですので、画像ファイルを適切な名称にリネームし、リソースに追加しておく必要があります。

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

ダウンロード

主な機能

  1. イメージビューの取得
  2. 全画面画像の取得 (デバイス判別機能を使用)
  3. 画像にマスク適用
  4. 画像のリサイズ

使用方法

画像(UIImageView) の取得

1
2
3
4
//画像を取得
UIImageView *imageView = [DCImage imageView:@"Pandora_640_1136"
                                   imageExt:@"jpg"
                                       rect:CGRectMake(0, 0, IMG_WIDTH_iPhone5, IMG_HEIGHT_iPhone5)];

全画面背景画像の取得

1
2
3
4
5
6
7
//クラス初期化
DCImage *dcImage = [[DCImage alloc] init];

//全画面の背景画像を取得
UIImageView *imageView = [DCImage imageView:[dcImage backgroundImageName:@"Pandora"]
                                   imageExt:@"jpg"
                                       rect:CGRectMake(0, 0, IMG_WIDTH_iPhone5, IMG_HEIGHT_iPhone5)];

画像にマスク適用

1
2
3
4
5
6
7
8
//マスクを適用する画像
UIImage *image = [DCImage getUIImageFromResources:@"Pandora_640_1136" ext:@"jpg"];

//マスク画像
UIImage *imageMask = [DCImage getUIImageFromResources:@"image_mask" ext:@"png"];

//マスク適用
UIImage *maskedImage = [DCImage mask:image withMask:imageMask];

画像のリサイズ

1
2
3
4
5
//画像取得
UIImage *image = [DCImage getUIImageFromResources:@"Pandora_640_1136" ext:@"jpg"];

//画像リサイズ適用
image = [DCImage resize:image rect:CGRectMake(0, 0, 160, 283)];

サンプルソースコード

ViewController.h

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

//サンプルの処理振り分け (1〜4)
#define MODE               1

#define IMG_WIDTH_iPhone5  320
#define IMG_HEIGHT_iPhone5 568

@interface ViewController : UIViewController

@end

ViewController.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
91
92
93
94
95
96
97
98
99
100
101
102
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

typedef enum sample : NSInteger {
    MODE_IMAGE_VIEW = 1,
    MODE_BG_IMAGE = 2,
    MODE_MASK_IMAGE = 3,
    MODE_RESIZE_IMAGE = 4
} sample;

- (void)viewDidLoad
{
    [super viewDidLoad];
  
    switch (MODE) {
        case MODE_IMAGE_VIEW:
            //イメージを表示
            [self setImageView];
            break;
        case MODE_BG_IMAGE:
            //全画面の背景画像を表示
            [self setBackgroundImage];
            break;
        case MODE_MASK_IMAGE:
            //画像にマスクを適用
            [self setImageMask];
            break;
        case MODE_RESIZE_IMAGE:
            //画像のリサイズ適用
            [self resizeImage];
            break;
    }
}

//イメージを表示
- (void)setImageView
{
    //画像を取得
    UIImageView *imageView = [DCImage imageView:@"Pandora_640_1136"
                                       imageExt:@"jpg"
                                           rect:CGRectMake(0, 0, IMG_WIDTH_iPhone5, IMG_HEIGHT_iPhone5)];

    //画面に追加
    [self.view addSubview:imageView];
}

//全画面の背景画像を表示
- (void)setBackgroundImage
{
    //クラス初期化
    DCImage *dcImage = [[DCImage alloc] init];

    //全画面の背景画像を取得
    UIImageView *imageView = [DCImage imageView:[dcImage backgroundImageName:@"Pandora"]
                                       imageExt:@"jpg"
                                           rect:CGRectMake(0, 0, IMG_WIDTH_iPhone5, IMG_HEIGHT_iPhone5)];

    //画面に追加
    [self.view addSubview:imageView];
}

//画像にマスクを適用
- (void)setImageMask
{
    //マスクを適用する画像
    UIImage *image = [DCImage getUIImageFromResources:@"Pandora_640_1136" ext:@"jpg"];

    //マスク画像
    UIImage *imageMask = [DCImage getUIImageFromResources:@"image_mask" ext:@"png"];

    //マスク適用
    UIImage *maskedImage = [DCImage mask:image withMask:imageMask];

    //画面に追加
    UIImageView *imageView = [[UIImageView alloc] init];
    imageView.frame = CGRectMake(0, 0, IMG_WIDTH_iPhone5, IMG_HEIGHT_iPhone5);
    imageView.image = maskedImage;
    [self.view addSubview:imageView];
}

//画像のリサイズ適用
- (void)resizeImage
{
    //画像取得
    UIImage *image = [DCImage getUIImageFromResources:@"Pandora_640_1136" ext:@"jpg"];

    //画像リサイズ適用
    image = [DCImage resize:image rect:CGRectMake(0, 0, 160, 283)];

    //画面に追加
    UIImageView *imageView = [[UIImageView alloc] init];
    imageView.frame = CGRectMake(0, 0, IMG_WIDTH_iPhone5, IMG_HEIGHT_iPhone5);
    imageView.image = image;
    [self.view addSubview:imageView];
}

@end

ソースコード

DCImage.h

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

@interface DCImage : UIImage

#pragma mark - public method
+ (UIImageView *)imageView:(NSString *)imageName imageExt:(NSString *)ext rect:(CGRect)rect;
+ (UIImage *)mask:(UIImage *)image withMask:(UIImage *)maskImage;
+ (UIImage *)resize:(UIImage *)image rect:(CGRect)rect;
+ (NSString *)getImgFileName:(NSString *)src;
+ (UIImage *)getUIImageFromResources:(NSString*)fileName ext:(NSString*)ext;

@end

DCImage.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
#import "DCImage.h"

@implementation DCImage

#pragma mark - Image View

// 画像の取得
+ (UIImageView *)imageView:(NSString *)imageName imageExt:(NSString *)imageExt rect:(CGRect)rect
{
    UIImage *image = [DCImage getUIImageFromResources:imageName ext:imageExt];
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:rect];
    imageView.image = image;
    imageView.contentMode = UIViewContentModeScaleAspectFill;
    imageView.autoresizingMask =
        UIViewAutoresizingFlexibleLeftMargin |
        UIViewAutoresizingFlexibleRightMargin |
        UIViewAutoresizingFlexibleTopMargin |
        UIViewAutoresizingFlexibleBottomMargin;
    return (imageView);
}

#pragma mark - Mask Image

// 画像にマスク適用
+ (UIImage *)mask:(UIImage *)image withMask:(UIImage *)maskImage
{
    CGImageRef maskRef = maskImage.CGImage;
    CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
                                        CGImageGetHeight(maskRef),
                                        CGImageGetBitsPerComponent(maskRef),
                                        CGImageGetBitsPerPixel(maskRef),
                                        CGImageGetBytesPerRow(maskRef),
                                        CGImageGetDataProvider(maskRef), NULL, false);
    CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
    return ([UIImage imageWithCGImage:masked]);
}

#pragma mark - Resize Image

// 画像のリサイズ
+ (UIImage *)resize:(UIImage *)image rect:(CGRect)rect
{
    UIGraphicsBeginImageContext(rect.size);
    [image drawInRect:rect];
    UIImage* resizedImage = UIGraphicsGetImageFromCurrentImageContext();
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
    UIGraphicsEndImageContext();
    return (resizedImage);
}

#pragma mark - getter method

// 画像ファイル名取得
+ (NSString *)getImgFileName:(NSString *)src
{
    NSArray *a = [src componentsSeparatedByString:@"."];
    CGSize screenSize = [[UIScreen mainScreen] bounds].size;
    BOOL is4inch = screenSize.width == 320.0 && screenSize.height == 568.0;
    if(is4inch) {
        return [NSString stringWithFormat:@"%@[email protected]%@", [a objectAtIndex:0], [a objectAtIndex:1]];
    }
    return [NSString stringWithFormat:@"%@@2x.%@", [a objectAtIndex:0], [a objectAtIndex:1]];
}

// 画像ファイル取得
+ (UIImage *)getUIImageFromResources:(NSString*)fileName ext:(NSString*)ext
{
    NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:ext];
    UIImage *img = [[UIImage alloc] initWithContentsOfFile:path];
    return (img);
}

@end

お薦めの参考書

Swiftではじめる iPhoneアプリ開発の教科書 Swift 2 & Xcode 7対応
この参考書の通りに実践サンプルを作成することで、確実に力を養うことができます。サンプルコードもサイトからダウンロード出来るようになっており、特に広告の貼り方などが参考になりました。Swiftで何が出来るかを知ることができ、入門用にお薦めの1冊です。

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

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)