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