・Viewを重ねる方法
・OFのViewの背景を透過する。
ofxiOSSetGLViewTransparent(true);
main.m
#include "ofMain.h" #include "ofApp.h" int main(){ ofAppiOSWindow * window = new ofAppiOSWindow(); window->enableRetina(); ofSetupOpenGL(ofPtr<ofAppBaseWindow>(window), 1024,768, OF_FULLSCREEN); window->startAppWithDelegate("MyAppDelegate"); }
MyAppDelegate.mm
#import "MyAppDelegate.h" @implementation MyAppDelegate @synthesize vc; AVCaptureVideoPreviewLayer* previewLayer; UIView* cameraView; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [super applicationDidFinishLaunching:application]; self.vc = [[RootViewController alloc] init]; [self.window setRootViewController: self.vc]; setupCameraPreview(); [self.vc.view addSubview: cameraView]; AppViewController* app = [[AppViewController alloc] init]; [self.vc.view addSubview: app.view]; return YES; } - (void) dealloc { self.vc = nil; [super dealloc]; } void setupCameraPreview() { AVCaptureSession *session = [AVCaptureSession new]; // [session setSessionPreset:AVCaptureSessionPreset1920x1080]; [session setSessionPreset:AVCaptureSessionPreset1280x720]; AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; AVCaptureDeviceInput *deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil]; if ([session canAddInput:deviceInput]){ [session addInput:deviceInput]; } previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session]; [previewLayer setBackgroundColor:[[UIColor blackColor] CGColor]]; [previewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill]; cameraView = [[UIView alloc]initWithFrame: CGRectMake(0,0,640/2,1136/2)]; cameraView.backgroundColor = [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:1.f]; CALayer *rootLayer = [cameraView layer]; [rootLayer setMasksToBounds:YES]; [previewLayer setFrame:[rootLayer bounds]]; [rootLayer addSublayer:previewLayer]; [session startRunning]; } @end
MyAppDelegate.h
#import "ofxiOSAppDelegate.h" #import <AVFoundation/AVFoundation.h> #import "AppViewController.h" #import "RootViewController.h" @interface MyAppDelegate : ofxiOSAppDelegate { } @property (nonatomic, retain) RootViewController* vc;
RootViewController.h
@interface RootViewController : UIViewController @end
RootViewController.mm
#import <Foundation/Foundation.h> #import "RootViewController.h" @implementation RootViewController - (BOOL)shouldAutorotate { return NO; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscapeRight; } @end
AppViewController.mm
#import "AppViewController.h" #import "ofApp.h" @implementation AppViewController - (id)init { self = [super initWithFrame:[UIScreen mainScreen].bounds app: new ofApp()]; if(self != nil) { } return self; } @end
AppViewController.h
#import "ofxiOSViewController.h" @interface AppViewController : ofxiOSViewController @end
ofApp.mm
//-------------------------------------------------------------- void ofApp::setup(){ ofBackground(0,0,0,0); ofSetOrientation(OF_ORIENTATION_DEFAULT); ofxiOSSendGLViewToFront(); ofxiOSSetGLViewTransparent(true); // ofxiOSSetGLViewUserInteraction(false); ofEnableAlphaBlending(); camera.setPosition(0,0,0); camera.setupPerspective(); camera.setVFlip(false); camera.setFarClip(5000); //camera.disableMouseInput(); } //-------------------------------------------------------------- void ofApp::update() { } //-------------------------------------------------------------- void ofApp::draw() { camera.begin(); ofSetColor(255, 0, 0,100); ofSetConeResolution(32, 16); ofDrawCone(0, 0, 0, 25, 50); camera.end(); } //-------------------------------------------------------------- void ofApp::exit(){ }
ofApp.h
class ofApp : public ofxiOSApp { public: void setup(); void update(); void draw(); void exit(); void touchDown(ofTouchEventArgs & touch); void touchMoved(ofTouchEventArgs & touch); void touchUp(ofTouchEventArgs & touch); void touchDoubleTap(ofTouchEventArgs & touch); void touchCancelled(ofTouchEventArgs & touch); }