【发布时间】:2011-10-13 13:48:25
【问题描述】:
我正在尝试在 CALayer 的子类中显示从 UIImagePickerController 中选择的 UIImage 并将其添加到我的超级视图中,但我无法让它工作。
这就是我从 UIImagePickerController 获取图像的方式,这似乎效果不错:
- (IBAction)importImage:(id)sender
{
UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.delegate = self;
imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:imagePickerController];
[popover setPopoverContentSize:CGSizeMake(320,320)];
[popover presentPopoverFromRect:importBackgroundButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
self.popoverController = popover;
[imagePickerController release];
}
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
[self.popoverController dismissPopoverAnimated:YES];
UIImage* img = [info objectForKey:UIImagePickerControllerOriginalImage];
[[context currentDrawing] setBkgImage:img];
}
这是我的 CALayer 子类,其中包含要显示的 UIImage:
@interface UI_BackgroundImageLayer : CALayer
{
//This is for the Import image as background feature
UIImage* _bkgImg;
}
@property (nonatomic, retain) UIImage* _bkgImg;
-(void)update:(UIImage*)src;
@end
////
@implementation UI_BackgroundImageLayer
- (id)init
{
self = [ super init ];
// [self resetTransform ];
_bkgImg = nil;
return self;
}
-(void)update:(UIImage*)src
{
_bkgImg = [[UIImage alloc] initWithCGImage:src.CGImage];
self.contentsGravity = kCAGravityResizeAspect;
self.contents = (id)_bkgImg.CGImage;
}
@end
当用户选择另一个图像时,我会更新 CALayer 的内容!
CALayer 从一开始就添加到 superview 中:
[[_superView layer] insertSublayer:context._imgLayer atIndex:0];
它在索引 0 处插入,因为它是背景图像,因此它必须位于其他 UI 元素和绘图之下。
这一切对我来说似乎都很好,但屏幕上什么也没有出现……
【问题讨论】:
-
是否要求插入图像作为视图的背景?
-
不确定您的意思...该操作基于工具栏中包含的按钮(即 UIViewController)。然后将 UIImagePickerController 的结果发送到我的应用程序“上下文”,该应用程序服务于整个程序。
-
我已经通过直接在 open gl 中显示我的背景图像解决了我的问题。如果有人需要代码,请告诉我,我可以写一篇关于如何执行此操作的帖子。
标签: iphone ipad uikit core-animation calayer