0

希望有人可以幫忙解決這個問題。我正在嘗試使用UISlider更改CA子圖層中的值。一直工作了幾天,但似乎無法弄清楚。相機運行良好,滑塊正在移動,但連接丟失在某處..!使用UISlider更改CALayer值

Ps。相對較新的,所以一步一步的建議,將不勝感激:-)

謝謝!

.h文件中:

#import <UIKit/UIKit.h> 
#import <AVFoundation/AVFoundation.h> 
#import <QuartzCore/QuartzCore.h> 

@interface AVViewController : UIViewController{ 
IBOutlet UISlider *mySlider; 
} 

@property (nonatomic, retain) IBOutlet UISlider*mySlider; 

- (IBAction)adjustValue:(id)sender; 
@end 

.m文件從@implementation行:

@implementation AVViewController 

@synthesize mySlider; 

- (IBAction)adjustValue:(UISlider *)sender { 
float value = [(UISlider *)sender value]; 
if (value <0) value = 0; 
if (value >0) value = 1; 
mySlider.value = value; 
} 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

AVCaptureSession *session = [[AVCaptureSession alloc] init]; 
[session setSessionPreset:AVCaptureSessionPresetHigh]; 

NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; 
    AVCaptureDevice *frontCamera = nil; 
    for (AVCaptureDevice *device in devices) { 
     if (device.position == AVCaptureDevicePositionFront) { 
      frontCamera = device; 
      break; 
     } 
} 

NSError *error = nil;  
AVCaptureDevice *input = [AVCaptureDeviceInput deviceInputWithDevice:frontCamera error:&error]; 
    [session addInput:input]; 

AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session]; 
[previewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill]; 

CALayer *rootLayer = [[self view] layer]; 
[rootLayer setMasksToBounds:YES]; 
[previewLayer setFrame:CGRectMake(15, 15, 290 , 350)]; 
previewLayer.cornerRadius = 100.0; 
[rootLayer insertSublayer:previewLayer atIndex:0]; 

CALayer *sublayer = [CALayer layer]; 
sublayer.frame = CGRectMake (15,15,previewLayer.bounds.size.width,previewLayer.bounds.size.height); 
//VALUES TO BE ADJUSTED WITH UI SLIDER 
sublayer.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:mySlider.value].CGColor; 
[self.view.layer addSublayer:sublayer]; 

[session startRunning]; 

} 

回答

0
  • 您需要將滑塊的值更改事件連接到您的IBAction爲。
  • 您還需要將實例保存到您的子圖層,以便您可以從viewDidLoad之外引用它。

viewDidLoad附加:

// Call adjustValue: when the slider value changes 
    [slider addTarget:self action:@selector(adjustValue:) forControlEvents:UIControlEventValueChanged]; 

    // create and configure sub layer 
    ... 
    self.mysublayer = sublayer; 

然後在IBAction您可以修改層:

- (IBAction)adjustValue:(UISlider *)sender { 
    float value = [sender value]; 
    // Modify layer here. 
    self.mysublayer.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:value].CGColor; 

} 

希望這有助於!

+0

謝謝!確實非常有用,現在很高興看到它的工作。再次感謝 :) – jadacoast