Objective c 使用UISlider更改CALayer值
希望有人能帮上忙。我正在尝试使用UISlider来更改CA子层中的值。我已经做了几天了,但似乎还没弄明白。相机运行正常,滑块正在移动,但某处缺少连接 注:这是一个相对较新的问题,因此请提供逐步建议:-) 谢谢大家! .h文件: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
#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;
}
希望这有帮助 谢谢大家!!确实非常有用&现在很高兴看到它起作用了。再次感谢:)