2013-10-28 73 views
1

我正在研究一個包含多個子視圖的應用程序。C4攝像頭捕捉 - 回到視圖時的問題

目前我有4個子視圖。 這將C4Workspace代碼設置它們

//TakePhoto 
    takePhoto= [TakePhoto new]; 
    takePhoto.canvas.frame=CGRectMake(0, 0, self.canvas.width, self.canvas.height); 
    takePhoto.canvas.userInteractionEnabled = YES; 
    [takePhoto transferVariables:1 topBarFromTop:TopBarFromTopDefault topBarHeight:TopNavBarHeightDefault bottomBarHeight:BottomBarHeightDefault navBarColor:navBarColorDefault navigationColor:navigationColorDefault typeColor:typeColorDefault fatFont:fatFontDefault normalFont:normalFontDefault iconTakePhoto:iconTakePhoto iconClose:iconClose iconBack:iconBack]; 
    [takePhoto setup]; 
    [takePhoto cameraSetup]; 
    [self.canvas addSubview:takePhoto.canvas]; 

    //CropPhoto 
    cropPhoto=[CropPhoto new]; 
    cropPhoto.canvas.frame=CGRectMake(0, 0, self.canvas.width, self.canvas.height); 
    cropPhoto.canvas.userInteractionEnabled=YES; 
    [cropPhoto transferVariables:1 topBarFroTop:TopBarFromTopDefault topBarHeight:TopNavBarHeightDefault bottomBarHeight:BottomBarHeightDefault navBarColor:navBarColorDefault navigationColor:navigationColorDefault typeColor:typeColorDefault overlayColor:overlayColorDefault fatFont:fatFontDefault normalFont:normalFontDefault iconClose:iconClose iconBack:iconBack iconOk:iconOk]; 
    [self.canvas addSubview:cropPhoto.canvas]; 
    cropPhoto.canvas.hidden= YES; 

    //AssignPhoto 
    assignLetter=[AssignLetter new]; 
    assignLetter.canvas.frame=CGRectMake(0, 0, self.canvas.width, self.canvas.height); 
    assignLetter.canvas.userInteractionEnabled=YES; 
    [assignLetter transferVariables:1 topBarFroTop:TopBarFromTopDefault topBarHeight:TopNavBarHeightDefault bottomBarHeight:BottomBarHeightDefault navBarColor:navBarColorDefault navigationColor:navigationColorDefault typeColor:typeColorDefault highlightColor:highlightColorDefault fatFont:fatFontDefault normalFont:normalFontDefault iconClose:iconClose iconBack:iconBack iconOk:iconOk iconSettings:iconSettings]; 

    [self.canvas addSubview:assignLetter.canvas ]; 
    assignLetter.canvas.hidden=YES; 

    //AlphabetView 
    alphabetView=[AlphabetView new]; 
    alphabetView.canvas.frame= CGRectMake(0, 0, self.canvas.width, self.canvas.height); 
    alphabetView.canvas.userInteractionEnabled=YES; 
    [alphabetView transferVaribles:1 topBarFromTop:TopBarFromTopDefault topBarHeight:TopNavBarHeightDefault bottomBarHeight:BottomBarHeightDefault navBarColor:navBarColorDefault navigationColor:navigationColorDefault typeColor:typeColorDefault darkenColor:darkenColorDefault fatFont:fatFontDefault normalFont:normalFontDefault iconClose:iconClose iconBack:iconBack iconMenu:iconMenu iconTakePhoto:iconTakePhoto iconAlphabetInfo:iconAlphabetInfo iconShareAlphabet:iconShareAlphabet iconWritePostcard:iconWritePostcard iconMyPostcards:iconMyPostcards iconMyAlphabets:iconMyAlphabets]; 
    [self.canvas addSubview:alphabetView.canvas]; 
    alphabetView.canvas.hidden=YES; 

//the methods to listen for from all other canvasses 
    [self listenFor:@"goToTakePhoto" andRunMethod:@"goToTakePhoto"]; 
    [self listenFor:@"goToCropPhoto" andRunMethod:@"goToCropPhoto"]; 
    [self listenFor:@"goToAssignPhoto" andRunMethod:@"goToAssignPhoto"]; 
    [self listenFor:@"goToAlphabetsView" andRunMethod:@"goToAlphabetsView"]; 

該主工作區還具有以下功能的意見

-(void)goToTakePhoto{ 
    [takePhoto resetCounter]; 
    [takePhoto setup]; 

    C4Log(@"TakePhoto"); 
    takePhoto.canvas.hidden=NO; 
    cropPhoto.canvas.hidden=YES; 
    assignLetter.canvas.hidden=YES; 
    alphabetView.canvas.hidden=YES; 
} 
-(void)goToCropPhoto{ 
    C4Log(@"going to CropPhoto"); 
    [cropPhoto displayImage:takePhoto.img]; 
    [cropPhoto setup]; 
    takePhoto.canvas.hidden=YES; 
    cropPhoto.canvas.hidden=NO; 
    assignLetter.canvas.hidden=YES; 
    alphabetView.canvas.hidden=YES; 
} 
-(void)goToAssignPhoto{ 
    C4Log(@"AssignPhoto"); 
    [assignLetter setup]; 
    [assignLetter drawCurrentAlphabet:currentAlphabet]; 
    [assignLetter drawCroppedPhoto:cropPhoto.croppedPhoto]; 
    takePhoto.canvas.hidden=YES; 
    cropPhoto.canvas.hidden=YES; 
    assignLetter.canvas.hidden=NO; 
    alphabetView.canvas.hidden=YES; 
} 
-(void)goToAlphabetsView{ 
    C4Log(@"AlphabetsView"); 
    [alphabetView setup]; 
    [alphabetView drawCurrentAlphabet:assignLetter.currentAlphabet]; 
    takePhoto.canvas.hidden=YES; 
    cropPhoto.canvas.hidden=YES; 
    assignLetter.canvas.hidden=YES; 
    alphabetView.canvas.hidden=NO; 
} 

第一視圖被拍攝照片非常相似的教程之間切換(我爲攝像機添加了一個重置​​計數器,因爲我注意到拍攝照片的按鈕在被點擊時總是發送兩次通知)。

-(void) setup{ 
photoButtonImage=iconTakePhoto; 
    photoButtonImage.height=45; 
    photoButtonImage.width=90; 
    photoButtonImage.center=CGPointMake(self.canvas.width/2, self.canvas.height-bottomBarHeight/2); 
    [self.canvas addImage:photoButtonImage]; 
    //gestures to take the photo 
    [self listenFor:@"touchesBegan" fromObject:photoButtonImage andRunMethod:@"captureImage"]; 
    [self numberOfTouchesRequired:1 forGesture:@"capture"]; 
    [self listenFor:@"imageWasCaptured" fromObject:cam andRunMethod:@"goToCropPhoto"]; 
} 

-(void)cameraSetup{ 
    cam = [C4Camera cameraWithFrame:CGRectMake(0,topBarFromTop+topBarHeight, self.canvas.width, self.canvas.height-(topBarHeight+bottomBarHeight+topBarFromTop))]; 
    cam.cameraPosition = CAMERABACK; 
    [self.canvas addCamera:cam]; 
    [cam initCapture]; 
    counter=0; 
} 
-(void) captureImage{ 
    [cam captureImage]; 
    C4Log(@"capturing image"); 
} 
-(void)resetCounter{ 
    counter=0; 
} 

這工作正常,只要我從C4Label導航回該視圖,但不是如果我從圖像導航回來。即使我在接觸兩者時也運行完全相同的功能。 它看起來像這樣:

//image as navigation element 
takePhotoButton=iconTakePhoto; 
    takePhotoButton.width=60; 
    takePhotoButton.center=CGPointMake(takePhotoButton.width/2+5, bottomNavBar.center.y); 
    [self.canvas addImage:takePhotoButton]; 
    [self listenFor:@"touchesBegan" fromObject:takePhotoButton andRunMethod:@"goToTakePhoto"]; 

//label as navigation element 
takePhoto=[C4Label labelWithText:@"take Photo" font: normalFont]; 
    takePhoto.center=CGPointMake(self.canvas.width-(takePhoto.width/2+5), topNavBar.center.y); 
    [self.canvas addLabel:takePhoto ]; 
    [self listenFor:@"touchesBegan" fromObject:takePhoto andRunMethod:@"goToTakePhoto"]; 

,最後,這是該視圖裏面的函數發送TE通知

-(void) goToTakePhoto{ 
    C4Log(@"goToTakePhoto"); 
    [self removeFromView]; //removes the currently displayed items from being displayed 
    [self postNotification:@"goToTakePhoto"]; 
} 

我可以把它現在使用標籤的工作,但它會如此好得多使用C4Image作爲按鈕...... 任何想法? 可以使用完整的代碼在Github上:http://github.com/susemiessner/Urban-Alphabets/tree/master/urbanAlphabetsII

+0

難以編譯您的項目,github回購缺少圖像和其他一些文件。你能做到:'fromObject:theImageYouWantToUse'而不是'takePhoto'標籤嗎? –

+0

這就是我在這裏做的:'[self listenFor:@「touchesBegan」fromObject:takePhotoButton andRunMethod:@「goToTakePhoto」];'它的作品也立即啓動了在下一個屏幕中拍攝照片的按鈕...... – suMi

回答

0

我剛剛找到這個問題的答案之一: 當回來的攝像頭查看舊

[self listenFor:@"imageWasCaptured" fromObject:cam andRunMethod:@"goToCropPhoto"]; 

依然活躍,因此它認爲我已經拍攝的圖像從相機,這是不正確的。所以解決方案是當我離開視圖我只需要禁用,使用此代碼

[self stopListeningFor:@"imageWasCaptured" object:cam]; 

這樣做的整個魔術!