Objective c 使用UISlider更改CALayer值

Objective c 使用UISlider更改CALayer值,objective-c,avfoundation,calayer,user-defined-functions,uislider,Objective C,Avfoundation,Calayer,User Defined Functions,Uislider,希望有人能帮上忙。我正在尝试使用UISlider来更改CA子层中的值。我已经做了几天了,但似乎还没弄明白。相机运行正常,滑块正在移动,但某处缺少连接 注:这是一个相对较新的问题,因此请提供逐步建议:-) 谢谢大家! .h文件: #import <UIKit/UIKit.h> #import <AVFoundation/AVFoundation.h> #import <QuartzCore/QuartzCore.h> @interface AVViewCont

希望有人能帮上忙。我正在尝试使用UISlider来更改CA子层中的值。我已经做了几天了,但似乎还没弄明白。相机运行正常,滑块正在移动,但某处缺少连接

注:这是一个相对较新的问题,因此请提供逐步建议:-)

谢谢大家!

.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
#导入
#进口
#进口
@接口AVViewController:UIViewController{
iBlider*mySlider;
}
@属性(非原子,保留)ibuislider*mySlider;
-(iAction)调整值:(id)发送方;
@结束
@implementation行中的.m文件:

@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];

}
@实现AVViewController
@合成糠醛;
-(iAction)调整值:(UISlider*)发送器{
浮点值=[(UISlider*)发送方值];
如果(值0)值=1;
mySlider.value=值;
}
-(无效)viewDidLoad
{
[超级视图下载];
AVCaptureSession*会话=[[AVCaptureSession alloc]init];
[会话设置会话预设:AVCaptureSessionPresetHigh];
NSArray*设备=[AVCaptureDevicesWithMediaType:AVMediaTypeVideo];
AVCaptureDevice*前置摄像头=无;
用于(AVCaptureDevice*设备中的设备){
if(device.position==AVCaptureDevicePositionFront){
前置摄像头=设备;
打破
} 
}
n错误*错误=nil;
AVCaptureDevice*输入=[AVCaptureDeviceInputDeviceInputWithDevice:frontCamera错误:&错误];
[会话附加输入:输入];
AVCaptureVideoPreviewLayer*previewLayer=[[AVCaptureVideoPreviewLayer alloc]initWithSession:session];
[previewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
CALayer*rootLayer=[[self view]layer];
[rootLayer setMasksToBounds:YES];
[previewLayer设置帧:CGRectMake(15,15,290,350)];
previewLayer.cornerRadius=100.0;
[根层插入子层:预览层索引:0];
CALayer*子层=[CALayer层];
sublayer.frame=CGRectMake(15,15,previewLayer.bounds.size.width,previewLayer.bounds.size.height);
//要使用UI滑块调整的值
sublayer.backgroundColor=[UIColor colorWithRed:0.0绿色:0.0蓝色:0.0 alpha:mySlider.value].CGColor;
[self.view.layer addSublayer:子层];
[会议开始和结束];
}
  • 您需要将滑块的值更改事件连接到iAction
  • 您还需要将实例保留在子层中,以便可以从
    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;
然后在
iAction
中,您可以修改图层:

- (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;

}

希望这有帮助

谢谢大家!!确实非常有用&现在很高兴看到它起作用了。再次感谢:)