我的应用程序由后台UIView中的工具栏和AVCaptureVideoPreviewLayer组成.我想看看关于设备方向的工具栏旋转,所以在我的主ViewController中,我实现了这个功能:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait
|| interfaceOrientation == UIInterfaceOrientationLandscapeLeft
|| interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
Run Code Online (Sandbox Code Playgroud)
这很好用,但是当界面方向改变时,我看到背景UIView(带有视频层)也在旋转,所以我的视频视图现在向左或向右旋转90度......这真的很酷!
所以我的问题是:有没有办法在特定的UIView上禁用自动旋转动画?
我已经看到了一个类似的问题:为单个UIView禁用自动旋转,但答案不适合我的问题,我真的需要背景视图不要移动,不要用一种"计数器来解决问题动画".所以我决定提出这个话题.
有任何想法吗 ?
谢谢 !
更新: iOS 6 beta 1不再出现
我目前正在使用新的iOS 5 SDK调整现有的iOS 4应用程序.我在一个读取Youtube视频的模态视图控制器中呈现UIWebView时发现了一个新的崩溃.
开始阅读视频很好,但是当我尝试全屏设置时,我得到以下异常:
Exception: UIViewControllerHierarchyInconsistency,
child view controller:<UIViewController: 0x6aef180>
should have parent view controller:<WebViewController: 0x6a706c0>
but requested parent is:<MPInlineVideoViewController: 0x6ae5d40>
Run Code Online (Sandbox Code Playgroud)
这是我在主视图控制器中实例化并呈现我的模态视图控制器的方法:
- (IBAction)buttonReleased:(id)sender
{
WebViewController *webVC = [[WebViewController alloc] initWithNibName:@"WebViewController" bundle:[NSBundle mainBundle]];
webVC.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
webVC.modalPresentationStyle = UIModalPresentationPageSheet;
[self presentModalViewController:webVC animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
我使用UIModalPresentationPageSheet作为modalPresentationStyle,当我将此值设置为UIModalPresentationFullScreen时,不再出现错误.
在我的模态WebViewController中,这是我加载Youtube视频的方式:
- (void)viewDidLoad
{
[super viewDidLoad];
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.youtube.com/watch?v=bDlm3eLRut0"]]];
}
Run Code Online (Sandbox Code Playgroud)
关于这个问题的任何想法?我可以提供一个完整的示例代码,以便在需要时隔离此崩溃.
谢谢 !
编辑:
我终于找到了一个真正简单的解决方案,使用CAGradientLayer类和CALayer绘图功能.
Ole Begemann为名为OBGradientView的 CAGradientLayer类发布了一个很棒的UIView包装器.
该类允许您在应用程序中轻松创建渐变UIView.
然后使用CALayer绘图功能添加圆角和投影值:
// Create the gradient view
OBGradientView *gradient = [[OBGradientView alloc] initWithFrame:someRect];
NSArray *colors = [NSArray arrayWithObjects:[UIColor redColor], [UIColor yellowColor], nil];
gradient.colors = colors;
// Set rounded corners and drop shadow
gradient.layer.cornerRadius = 5.0;
gradient.layer.shadowColor = [UIColor grayColor].CGColor;
gradient.layer.shadowOpacity = 1.0;
gradient.layer.shadowOffset = CGSizeMake(2.0, 2.0);
gradient.layer.shadowRadius = 3.0;
[self.view addSubview:gradient];
[gradient release];
Run Code Online (Sandbox Code Playgroud)
别忘了将QuartzCore框架添加到您的项目中.
原始问题:
我一直在研究一个自定义控件,它是一个圆角矩形按钮,填充线性渐变,并有一个投影.我使用这个答案填写了前两个步骤:链接文本
我现在的问题是在生成的形状下添加一个阴影.实际上,上下文被剪切到圆角矩形路径,所以当我使用CGContextSetShadow函数时,它不会绘制它.
我尝试通过绘制圆角矩形两次来解决这个问题,首先使用普通颜色,因此它绘制阴影,然后使用渐变填充重绘它.
它有点工作,但我仍然可以看到在第一次使用纯色绘制时形状角落处的几个像素,正如您在此缩放版本中看到的那样:
http://img269.imageshack.us/img269/6489/capturedcran20100701192.png
它几乎是好的,但还不完美......
这是我的-drawRect:实现:
static void addRoundedRectToPath(CGContextRef context, CGRect rect, float …
Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个应用程序来检测您使用加速度计使用iPhone制作的形状.例如,如果您用手拿着iPhone绘制一个圆圈,该应用程序将能够在屏幕上重绘它.这也适用于正方形,甚至更复杂的形状.我见过这样做的唯一应用示例是AirPaint(http://vimeo.com/2276713),但它似乎无法实时完成.
我的第一个尝试是对加速度计的X和Y参数应用低通滤波器,并使指针移动到这些值,与屏幕的大小成比例.但这显然没有用,我的精度非常低,如果我摇动设备它也会使指针移动......
关于那个的任何想法?您认为加速度计数据是否应该这样做?或者我应该考虑使用其他数据,例如指南针?
提前致谢 !
我试图拦截在我的整个应用程序中发生的任何活动(即触摸).
换句话说,我正在尝试通知我的主要UIView中发生的任何触摸事件,其中包含我的其余控件.为此,我认为UIView的方法-hitTest:withEvent:是一个很好的解决方案.
但是,当我在调用[super hitTest:... withEvent:...]之前NSLog进入这个重写方法时,我看到它为我所做的任何触摸都被调用了3次,我看不到我收到的事件有什么不同每次被召唤.
以下是如何在我的应用程序的主视图中实现该方法:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
NSLog(@"hitTest:withEvent called :");
NSLog(@"Event: %@", event);
NSLog(@"Point: %@", NSStringFromCGPoint(point));
NSLog(@"Event Type: %d", event.type);
NSLog(@"Event SubType: %d", event.subtype);
NSLog(@"---");
return [super hitTest:point withEvent:event];
}
Run Code Online (Sandbox Code Playgroud)
这是我在这个视图中单次触摸的NSLog:
2010-11-29 14:09:26.892 Application[68818:207] hitTest:withEvent called :
2010-11-29 14:09:26.892 Application[68818:207] Event: <UITouchesEvent: 0x5716d60> timestamp: 37935.2 touches: {(
)}
2010-11-29 14:09:26.892 Application[68818:207] Point: {173, 498}
2010-11-29 14:09:26.892 Application[68818:207] Event Type: 0
2010-11-29 14:09:26.892 Application[68818:207] Event SubType: 0
2010-11-29 14:09:26.893 Application[68818:207] ---
2010-11-29 14:09:26.893 Application[68818:207] hitTest:withEvent called …
Run Code Online (Sandbox Code Playgroud)