2013-01-09 14 views
5

Sto cercando di implementare lo zoom della videocamera utilizzando CGAffinetransform. Transform va bene, ma quando lo ridimensiono a una dimensione più grande, esce dal frame che ho assegnato allo AVCaptureVideoPreviewLayer. Ho provato a impostare la proprietà masksToBounds su YES ma non è stato di aiuto.Il contenuto del CALayer supera i limiti - iOS

Posso contenerlo nella sua cornice?

Edit:
Quello che voglio è che posso specificare una specifica area per lo strato di anteprima della fotocamera, se applico ridimensionamento trasformare ad esso, (vale a dire, cornice di anteprima strato viene espanso), la parte del il livello al di fuori dell'area specificata viene troncato.

risposta

25

Si dovrebbe mettere il livello che si sta ridimensionando all'interno di un altro livello e mascherarlo (il super strato). La stessa cosa funziona con le viste.

I.e. Hai due viste/livelli: clippingView e scalingView dove scalingView è la sottoview di clippingView e clippingView è la vista che effettivamente si aggancia ai suoi limiti.

[clippingView addSubview:scalingView]; 
clippingView.clipsToBounds = YES; 

o utilizzando strati

[clippingLayer addSublayer:scalingLayer]; 
clippingLayer.masksToBounds = YES; 
+0

Ho provato ad aggiungere una vista separata, ('UIImageView' a causa di qualche ragione, ma che non dovrebbe importa suppongo) e ha aggiunto un sottolivello come previewLayer cui ero impostazione come il sottolivello di' self.view .layer'. Ho impostato 'masksToBounds 'come' YES', ma continua ad andare fuori limite – neeraj

+0

Ho chiarito la mia risposta –

+0

Quello che ho fatto è stato, ho fatto una vista, con la cornice in cui volevo che fosse il livello di anteprima. la sua proprietà 'clipsToBounds' su YES. Questo era tutto. Doc dice che tutto il contenuto della vista si troverà all'interno del frame specificato se questa proprietà è impostata su Sì. In realtà non ho mai incontrato la proprietà prima d'ora. – neeraj

0

clipsToBounds di proprietà della vista a cui sto aggiungendo strato avrebbe dovuto essere impostato YES.

+0

Qualche ragione in particolare per modificare la risposta accettata? In pratica stai dicendo la stessa cosa di me. –

+0

1) La tua risposta non era la risposta accettata prima di questo, probabilmente perché non l'avevo capito in quel momento. Confuso tra livelli e viste. 2) Ieri ho guardato la mia risposta e ho visto che non c'era una risposta accettata, quindi ho accettato il mio ... – neeraj

+0

Ma ora vedo che il tuo è stato accettato. Quindi, è stato fatto un errore. – neeraj

2

Voi ragazzi avete tutti parzialmente ragione, ho trovato ma volevo chiarire.

Diciamo abbiamo aggiunto qualcosa di simile AVCaptureVideoPreviewLayer alla visualizzazione tramite [self.view.layer addSublayer:previewLayer]

1) [Self clipsToBounds] non fa nulla finché non si sta dicendo il suo strato primario di mascherare a limiti. [self.view.layer masksToBounds];

2) Solo perché la vista ha una cornice e così i suoi livelli NON SIGNIFICA HA LIMITI. Se non ha limiti, non c'è nulla da mascherare. Quindi fai questo self.view.layer.bounds = self.view.frame;

Quindi ecco tutto insieme ... tenere a mente ho fatto questo nella mia classe di UIView quindi non ho bisogno di chiamare self.view.

previewLayer.bounds = self.frame; 
self.layer.bounds = self.frame; 

self.layer.masksToBounds = YES; 
previewLayer.masksToBounds = YES; 

[self setBounds:self.frame]; 
[self clipsToBounds]; 
+0

Questo è esattamente quello che stavo cercando. Anche io ho un UIView personalizzato e voglio mostrare una videocamera usando AVFoundation. Grazie! –

Problemi correlati