#import "UnityAppController.h"
UIImageView *imageView;
UIView *backgroundView;
NSMutableArray *imageList;
const int kImageCount = 4;
NSString* const kImageNameFormat = @"anim%02d.png";
extern "C" {
void InitMyActivityIndicator();
void StartMyActivityIndicator();
void EndMyActivityIndicator();
}
void InitMyActivityIndicator()
{
imageList = [NSMutableArray array];
for (NSInteger i = 0; i < kImageCount; i++) {
NSString *imagePath = [NSString stringWithFormat:kImageNameFormat, i];
UIImage *img = [UIImage imageNamed:imagePath];
[imageList addObject:img];
}
UIImage *img = [imageList objectAtIndex:0];
CGSize cs = img.size;
CGRect pr = [[UIScreen mainScreen] bounds];
CGRect rect = CGRectMake(
(pr.size.width / 2 - cs.width / 2),
(pr.size.height / 2 - cs.height / 2),
cs.width,
cs.height
);
imageView = [[UIImageView alloc]initWithFrame:rect];
imageView.image = imageView.image = [imageList objectAtIndex:0];
imageView.animationImages = imageList;
imageView.animationDuration = 0.5;
imageView.animationRepeatCount = 0;
}
void CreateBackgroundView () {
CGRect pr = [[UIScreen mainScreen] bounds];
backgroundView = [[UIView alloc] init];
backgroundView.frame = CGRectMake(0, 0, pr.size.width, pr.size.height);
backgroundView.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
[UnityGetGLViewController().view addSubview:backgroundView];
}
void StartMyActivityIndicator() {
InitMyActivityIndicator();
CreateBackgroundView();
[UnityGetGLViewController().view addSubview:imageView];
[imageView startAnimating];
}
void EndMyActivityIndicator()
{
[imageView removeFromSuperview];
[backgroundView removeFromSuperview];
}
画像の取り込み手順
- iOS 側で表示する画像は XCode のプロジェクト内に取り込む必要がある
- 上記のコードでは前回の Plugins/Android/res/drawable/*.png を使いまわす想定
- 以下手順
- Unity で Platform を iOS にしてビルド
- XCode でプロジェクトを開く
- Images.xcassets を選択し
- 中央ペインで右クリック
- Import を選んで前記の画像を選択して Open で取り込む
Unity 側のコード
- 以下のスクリプトを任意の GameObject にアタッチする
- StartActivityIndicator で表示、StopActivityIndicator で非表示
using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;
public class ActivityIndicator : SingletonMonoBehaviour<ActivityIndicator>{
#if UNITY_IOS
[DllImport("__Internal")]
static extern void InitMyActivityIndicator();
[DllImport("__Internal")]
static extern void StartMyActivityIndicator();
[DllImport("__Internal")]
static extern void EndMyActivityIndicator();
#endif
public void Start()
{
#if UNITY_IOS
InitMyActivityIndicator ();
DontDestroyOnLoad(gameObject);
#endif
}
public void StartActivityIndicator(){
#if UNITY_IOS
StartMyActivityIndicator();
#endif
}
public void StopActivityIndicator()
{
#if UNITY_IOS
EndMyActivityIndicator();
#endif
}
}