2013-04-29 2 views
0

Я хочу показать FBLoginView в ландшафтном слое Cocos2D. Первоначально имея только он добавил к виду он имел в виду вид был портрет, но, добавивОриентация FBLoginView

[loginview setTransform:CGAffineTransformMakeRotation(-M_PI/2)]; 

я смог его вращать на альбомную, как мне нужно. Отлично. Однако проблема возникает, когда вы снова нажимаете на нее, чтобы выйти из системы. Экран ActionSheet очень искажен, и я не могу нажимать на него никаких кнопок (см. Ниже).

http://www.dansinclair.co.uk/SO/FBLoginView_error.png

Я также получаю запись в моем журнале, когда это произойдет;

Представление листа действия, обрезанного его надписью. Некоторые элементы управления могут не реагировать на касания. На iPhone попробуйте - [UIActionSheet showFromTabBar:] или - [UIActionSheet showFromToolbar:] вместо - [UIActionSheet showInView:].

Насколько мне известно, настроить звонки в FBLoginView и из них непросто.

Любые идеи/мысли/советы были бы замечательными!

+0

Я не думаю, что FBLoginView должен отображаться в не -приграничная ориентация. –

+0

Итак, мне нужно создать пользовательский FBLoginView? Это немного боль в тылу и не утомительное вообще ... –

ответ

0

Итак, я нашел решение.

Учитывая, что я использую Cocos2D, было сложно (например, не стандартно) использовать элемент UIKit на CCLayer. Таким образом, мне пришлось реализовать CCUIViewWrapper, и все работает нормально.

Вот мой код для CCUIViewWrapper для работы с Cocos2D 2.X и ARC;

CCUIViewWrapper.h

#import "cocos2d.h" 

@interface CCUIViewWrapper : CCSprite 
{ 
UIView *uiItem; 
float rotation; 
} 
@property (nonatomic, retain) UIView *uiItem; 

+ (id) wrapperForUIView:(UIView*)ui; 

- (id) initForUIView:(UIView*)ui; 
- (void) updateUIViewTransform; 
@end 

CCUIViewWrapper.m

#import "CCUIViewWrapper.h" 

@implementation CCUIViewWrapper 

@synthesize uiItem; 

+ (id) wrapperForUIView:(UIView*)ui 
{ 
return [[self alloc] initForUIView:ui]; 
} 

- (id) initForUIView:(UIView*)ui 
{ 
if((self = [self init])) 
{ 
    self.uiItem = ui; 
    return self; 
} 
return nil; 
} 

-(void)setParent:(CCNode *)parent { 
if(parent == nil) { 
    [uiItem removeFromSuperview]; 
} else if(uiItem != nil) { 
    [[[CCDirector sharedDirector] view] addSubview:uiItem]; 
} 
[super setParent:parent]; 
} 

-(void)updateUIViewTransform { 
float thisAngle, pAngle; 
CGAffineTransform transform = CGAffineTransformMakeTranslation(0, [[CCDirector sharedDirector] winSize].height); 

for(CCNode *p = self; p != nil; p = p.parent) { 
    thisAngle = CC_DEGREES_TO_RADIANS(p.rotation); 
    if(p.ignoreAnchorPointForPosition) 
     transform = CGAffineTransformTranslate(transform, p.anchorPointInPoints.x, p.anchorPointInPoints.y); 

    if(p.parent != nil) { 
     pAngle = CC_DEGREES_TO_RADIANS(p.parent.rotation); 

     transform = CGAffineTransformTranslate(transform, 
               (p.position.x * cosf(pAngle))+(p.position.y * sinf(pAngle)), 
               (-p.position.y * cosf(pAngle))+(p.position.x * sinf(pAngle))); 
    } 
    else { 
     transform = CGAffineTransformTranslate(transform, p.position.x, -p.position.y); 
    } 

    transform = CGAffineTransformRotate(transform, thisAngle); 
    transform = CGAffineTransformScale(transform, p.scaleX, p.scaleY); 
    transform = CGAffineTransformTranslate(transform, -p.anchorPointInPoints.x, -p.anchorPointInPoints.y); 
} 

[uiItem setTransform:transform]; 
} 

- (void) setVisible:(BOOL)v 
{ 
[super setVisible:v]; 
[uiItem setHidden:!v]; 
} 

- (void) setRotation:(float)protation 
{ 
[super setRotation:protation]; 
[self updateUIViewTransform]; 
} 

- (void) setScaleX:(float)sx 
{ 
[super setScaleX:sx]; 
[self updateUIViewTransform]; 
} 

- (void) setScaleY:(float)sy 
{ 
[super setScaleY:sy]; 
[self updateUIViewTransform]; 
} 

- (void) setOpacity:(GLubyte)opacity 
{ 
[uiItem setAlpha:opacity/255.0]; 
[super setOpacity:opacity]; 
} 

- (void) setContentSize:(CGSize)size 
{ 
[super setContentSize:size]; 
uiItem.frame = CGRectMake(0, 0, self.contentSize.width, self.contentSize.height); 
uiItem.bounds = CGRectMake(0, 0, self.contentSize.width, self.contentSize.height); 
} 

- (void) setAnchorPoint:(CGPoint)pnt 
{ 
[super setAnchorPoint:pnt]; 
[self updateUIViewTransform]; 
} 

- (void) setPosition:(CGPoint)pnt 
{ 
[super setPosition:pnt]; 
[self updateUIViewTransform]; 
} 

@end 

Я надеюсь, что это помогает кто-то еще ...

Смежные вопросы