Sez*_*Sez 3 objective-c cocos2d-iphone ios nslayoutconstraint
我正在使用Cocos2D for iOS中的游戏,并在控制台中看到许多与约束相关的警告.我已在SO和其他网站上阅读了许多与约束相关的帖子,但未能解决此问题.
我没有 NIB文件,也没有在此项目中使用过XCodes用户界面构建器.Cocos2D只使用以编程方式创建的全屏GLView.据我所知,所有这些约束来自MPMoviePlayerController与UIView本身的交互.
我正在使用此代码进行MPMoviePlayerController集成:https://github.com/cocos2d/cocos2d-iphone-extensions/blob/master/Extensions/CCVideoPlayer/iOS/CCVideoPlayerImpliOS.m
稍微改变一下,以显示视频非全屏,并让它在iOS8上编译:
- (void) setupViewAndPlay
{
UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
CGSize viewSize = [[CCDirector sharedDirector] viewSizeInPixels];
// We want to show these animations windowed - not full screen
// Native resolution of the movie is 480p = 640x360
CGRect videoFrame = CGRectMake( 0, 0, 640, 360);
if (viewSize.height < 768)
{
// On the iphone play at 1/2 size
videoFrame = CGRectMake(0, 0, 320, 180);
}
videoFrame.origin.x = (viewSize.width - videoFrame.size.width) / 2.0f;
videoFrame.origin.y = (viewSize.height - videoFrame.size.height) / 2.0f;
[keyWindow addSubview: [_theMovie view]];
[[_theMovie view] setHidden: NO];
[[_theMovie view] setFrame: videoFrame];
[[_theMovie view] setCenter: keyWindow.center ];
[keyWindow setAutoresizesSubviews:NO];
[self updateOrientationWithOrientation: (UIDeviceOrientation)[[UIApplication sharedApplication] statusBarOrientation]];
// Movie playback is asynchronous, so this method returns immediately.
[_theMovie play];
}
Run Code Online (Sandbox Code Playgroud)
这是我看到的警告:
2014-10-01 11:32:45.360 SpaceBotAlpha[182:4484] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x17774f20 H:|-(34)-[MPKnockoutButton:0x177db4e0](LTR) (Names: '|':_UIBackdropContentView:0x18c7e040 )>",
"<NSLayoutConstraint:0x17774f50 H:[MPKnockoutButton:0x177db4e0]-(34)-[MPDetailSlider:0x18cb1f60](LTR)>",
"<NSLayoutConstraint:0x17774f80 H:[MPDetailSlider:0x18cb1f60]-(34)-[UIView:0x18cb6780](LTR)>",
"<NSLayoutConstraint:0x17774fb0 UIView:0x18cb6780.right == _UIBackdropView:0x18caec50.right - 34>",
"<NSLayoutConstraint:0x18cafac0 H:|-(0)-[_UIBackdropView:0x18caec50] (Names: '|':MPVideoPlaybackOverlayView:0x1778ad80 )>",
"<NSLayoutConstraint:0x18cc77b0 H:[_UIBackdropView:0x18caec50]-(0)-| (Names: '|':MPVideoPlaybackOverlayView:0x1778ad80 )>",
"<NSAutoresizingMaskLayoutConstraint:0x1776da10 h=-&- v=-&- _UIBackdropContentView:0x18c7e040.midX == _UIBackdropView:0x18caec50.midX>",
"<NSAutoresizingMaskLayoutConstraint:0x1776da40 h=-&- v=-&- _UIBackdropContentView:0x18c7e040.width == _UIBackdropView:0x18caec50.width>",
"<NSAutoresizingMaskLayoutConstraint:0x177aa050 h=-&- v=-&- MPVideoPlaybackOverlayView:0x1778ad80.width == MPVideoContainerView:0x1778b8e0.width>",
"<NSAutoresizingMaskLayoutConstraint:0x1775e480 h=-&- v=-&- MPVideoContainerView:0x1778b8e0.width == MPSwipableView:0x18cba6f0.width>",
"<NSAutoresizingMaskLayoutConstraint:0x177a8ce0 h=-&- v=-&- MPSwipableView:0x18cba6f0.width == MPMovieView:0x177c7eb0.width>",
"<NSAutoresizingMaskLayoutConstraint:0x17766310 h=--& v=--& H:[MPMovieView:0x177c7eb0(0)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x17774f50 H:[MPKnockoutButton:0x177db4e0]-(34)-[MPDetailSlider:0x18cb1f60](LTR)>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
Run Code Online (Sandbox Code Playgroud)
我发现的关于约束的所有帖子都假定已经使用了接口构建器.
有线索吗?谢谢!
以防万一有人发现这篇文章寻找关于旋转的信息:我注意到在iOS8上的一些奇怪的事情MPMoviePlayerController似乎是自动旋转到正确的方向,如果我按updateOrientationWithOrientation原样保留方法(参见GitHub链接)那么它出现在90要求的程度.所以在iOS8上我检测到updateOrientationWithOrientation中的版本并退出而不在iOS8上做任何事情.
我遇到了同样的限制问题.然而,sez的答案对我没有用,所以我挖了一点.在我的情况下,问题是[videoConroller prepareToPlay]在设置视频控制器视图的帧并将其添加到超级视图之前调用.
我正在创建我的MPMoviePlayerController的实例并在viewDidLoad中调用prepareToPlay,因为我此时有了url.但是,我等到viewDidAppear实际调整视频播放器的大小并将其添加到视图层次结构中.
将视图添加到层次结构后,只需将该方法调用移动即可解决我的问题.此外,我能够有一个与父视图的边界不匹配的框架.
您是否尝试使用MPMoviePlayerViewController而不是MPMoviePlayerController?(它适用于我:-))然后将translateAutoresizingMaskIntoConstraints设置为YES.像这样 :
MPMoviePlayerViewController *moviePlayerViewController = [MPMoviePlayerViewController new];
[moviePlayerViewController.view setTranslatesAutoresizingMaskIntoConstraints:YES];
Run Code Online (Sandbox Code Playgroud)
我希望这对你有用!
| 归档时间: |
|
| 查看次数: |
2712 次 |
| 最近记录: |