Нужна помощь, чтобы правильно позиционировать UIView в UIView - PullRequest
0 голосов
/ 03 марта 2012

Я сделал подкласс UIView (чаша), и когда я пытаюсь сделать чашу внутри чаши, а затем центрировать внутреннюю по центру внешнего, она оказывается ниже и справа от центра.Как бы я правильно центрировать его?

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
    // Initialization code
    //CGColorRef lightGrayColor = [UIColor colorWithRed:230.0/255.0 green:230.0/255.0 blue:230.0/255.0 alpha:1.0].CGColor;
    self.userInteractionEnabled = YES;
    UIGestureRecognizer *twoFingerZ = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchZoom:)] ;
    [self addGestureRecognizer:twoFingerZ];
    UILabel *label = [[UILabel alloc] init];
    [label setFont:[UIFont fontWithName:@"Arial" size:64]];
    label.text = [NSString stringWithFormat:@"March"];
    [label sizeToFit];
    label.center = self.center;
    label.backgroundColor = [UIColor clearColor];
    label.textColor = [UIColor lightGrayColor];
    self.backgroundColor = [UIColor whiteColor];
    [self addSubview:label];
}
return self;
}

-(void)pinchZoom:(UIPinchGestureRecognizer *)recognizer
{
if([(UIPinchGestureRecognizer*)recognizer state] == UIGestureRecognizerStateEnded) {
CGAffineTransform newForm = CGAffineTransformMakeScale(600/self.bounds.size.width, 600/self.bounds.size.height);

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
[self setTransform:newForm];
    return;
[UIView commitAnimations];
}

if([(UIPinchGestureRecognizer*)recognizer state] == UIGestureRecognizerStateBegan) {
    subClip = [[clipView alloc] initWithFrame:CGRectMake((self.center.x - ([delegate getSize:self].width/2)), (self.center.y - ([delegate getSize:self].height/2)), [delegate getSize:self].width, [delegate getSize:self].height)];
    subClip.transform = CGAffineTransformMakeScale(0.1, 0.1);
    [self addSubview:subClip];

    bowl *newB = [[bowl alloc] initWithFrame:CGRectMake(0, 0, 400, 400)];
    newB.center = self.center;
// right here! *************
    [self addSubview:newB];
}
recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale);
recognizer.scale = 1;    
}

РЕДАКТИРОВАТЬ: я исправил.Очевидно, что значение центра для UIView не совсем то, что я думал (похоже, это положение центра в другом виде или что-то в этом роде), поэтому вместо newB.center = self.center, правильный способ сделать этоwas newB.center = CGPointMake (self.frame.size.width / 2, self.frame.size.height / 2);

1 Ответ

2 голосов
/ 03 марта 2012

Для центрирования внутренней метки вы должны использовать:

label.center=CGPointMake(self.center.x,self.center.y);

Но сначала вы, вероятно, захотите определить размер рамки внутренней метки:

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0,0,yourWidth,yourHeight);

Вы также можете центрировать текст внутри внутренней метки:

label.textAlignment = UITextAlignmentCenter;

Кроме того, не уверены, что вы собираетесь в своем коде, с помощью этого:

[label sizeToFit];

Но в соответствии с документацией sizeToFit изменяет размер и перемещает представление получателя, чтобы оно охватывало его подпредставления.В этом случае не похоже, что у вашего внутреннего представления есть подпредставления.Таким образом, ваше центрирование может быть отключено, потому что у вас могут быть неожиданные размеры для вашей внутренней метки.Попробуйте установить цвет фона для этого ярлыка на то, что вы видите (то есть, не [UIColor clearColor]), чтобы дважды проверить его размеры.Может помочь решить проблему центрирования.

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...