小编Tho*_*ert的帖子

禁用UIView的自动旋转

我的应用程序由后台UIView中的工具栏和AVCaptureVideoPreviewLayer组成.我想看看关于设备方向的工具栏旋转,所以在我的主ViewController中,我实现了这个功能:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait
            || interfaceOrientation == UIInterfaceOrientationLandscapeLeft
            || interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
Run Code Online (Sandbox Code Playgroud)

这很好用,但是当界面方向改变时,我看到背景UIView(带有视频层)也在旋转,所以我的视频视图现在向左或向右旋转90度......这真的很酷!
所以我的问题是:有没有办法在特定的UIView上禁用自动旋转动画?

我已经看到了一个类似的问题:为单个UIView禁用自动旋转,但答案不适合我的问题,我真的需要背景视图不要移动,不要用一种"计数器来解决问题动画".所以我决定提出这个话题.

有任何想法吗 ?

谢谢 !

iphone uiview uiinterfaceorientation

21
推荐指数
2
解决办法
1万
查看次数

iOS5:播放Youtube视频的模态UIViewController中的UIWebView上的异常

更新: 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)

关于这个问题的任何想法?我可以提供一个完整的示例代码,以便在需要时隔离此崩溃.

谢谢 !

uiwebview html5-video modalviewcontroller ios ios5

19
推荐指数
1
解决办法
3141
查看次数

绘制带有渐变和阴影的圆形UIView

编辑:

我终于找到了一个真正简单的解决方案,使用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 gradient rounded-corners uiview dropshadow

14
推荐指数
1
解决办法
2万
查看次数

如何使用加速度计检测iPhone在空间中的移动?

我正在尝试制作一个应用程序来检测您使用加速度计使用iPhone制作的形状.例如,如果您用手拿着iPhone绘制一个圆圈,该应用程序将能够在屏幕上重绘它.这也适用于正方形,甚至更复杂的形状.我见过这样做的唯一应用示例是AirPaint(http://vimeo.com/2276713),但它似乎无法实时完成.

我的第一个尝试是对加速度计的X和Y参数应用低通滤波器,并使指针移动到这些值,与屏幕的大小成比例.但这显然没有用,我的精度非常低,如果我摇动设备它也会使指针移动......

关于那个的任何想法?您认为加速度计数据是否应该这样做?或者我应该考虑使用其他数据,例如指南针?

提前致谢 !

iphone drawing accelerometer

13
推荐指数
3
解决办法
1万
查看次数

UIView的-hitTest:withEvent:调用了三次?

我试图拦截在我的整个应用程序中发生的任何活动(即触摸).

换句话说,我正在尝试通知我的主要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)

iphone events uiview hittest

13
推荐指数
3
解决办法
8746
查看次数