XCode 6.0.1, iOS 8 사용런타임시 Autolayout'd 컨트롤의 ACTUAL 위치가 맞습니까?
나는 Autolayout/constraints를 통해 배치 한 UIButton이 있습니다.
첫 번째 단추에 상대적으로 배치 된 단추를 프로그래밍 방식으로 추가하려고합니다. 특히 초기 버튼의 중심점을 중심으로 원에 추가하고 있습니다.
autolayout'd 버튼이 장치의 실제 화면 크기가 아닌 536x536 수퍼 뷰 인터페이스 빌더와 관련하여 원점을보고하고 있다는 것을 제외하고는 새 버튼의 좌표를 찾기 위해 사용하고 있습니다. .
제약 조건이 "컨테이너의 가운데 X와 Y"라고 말하기 때문에 화면 중앙에 나타나지만 어떤 장치/화면 크기, frame.origin = (268, 268)이든 관계없이 표시됩니다. IB의 시야 중심 (536/2 = 268).
그래서 원래 인터페이스 빌더 좌표와 대조적으로 어떻게 "실제 장치 좌표"로 변환 할 수 있습니까?
TIA
편집 : 나는 그것이 중심 또는 있지 않다면 그것을 상관없이 번역 할 필요가있다. 기기의 화면 크기를 가져올 수 있고 중앙에있는 경우 2로 나눌 수 있음을 알았습니다.
Edit2 : @jrturton - 런타임시 위치를 어디에서보고합니까? 어떤 재산? 원점과 중심점이 모두 정확합니다. 어쨌든, 코드 :
버튼 만들기 :
- (void)setupButtons: (int)buttonCount
{
if ((buttonCount > MAX_BUTTONS) || (buttonCount < MIN_BUTTONS)) {
return;
}
float totalRads = degreesToRadians(360.0);
float deltaRads = totalRads/(float)buttonCount;
float radius = 30.0f;
NSMutableArray *buttons = [[NSMutableArray alloc] init];
CGRect centerFrame = self.centerMenuButton.frame;
for (int i = 0; i < buttonCount; i++) {
CGPoint dest = CGPointMake(
(radius * cosf(i * deltaRads) + centerFrame.origin.x),
(radius * sinf(i * deltaRads) + centerFrame.origin.y)
);
CGRect frame = CGRectMake(dest.x, dest.y, 64.0, 64.0);
UIButton *button = [[UIButton alloc] initWithFrame:frame];
[button setImage:[UIImage imageNamed:@"pink_star"] forState:UIControlStateNormal];
[buttons addObject:button];
}
_menuButtons = [[NSArray alloc] initWithArray:buttons];
}
을 그들 표시 :
- (void)showMenu
{
NSLog(@"showMenu");
for (int i = 0; i < [_menuButtons count]; i++) {
UIButton *btn = [_menuButtons objectAtIndex:i];
NSLog(@"origin: %f, %f", btn.frame.origin.x, btn.frame.origin.y);
[self.view addSubview:btn];
}
_menuOpen = YES;
}
내가 (IB에서 설정 한 제약 조건) 원래, 자동 레이아웃 버튼의 중심에 대한 몇 가지 NSLogs이 :
각 버튼 당 하나 (현재 2 개) :
RadialMenuText[14125:6281339] origin: 298.000000, 268.000000
RadialMenuText[14125:6281339] origin: 238.000000, 267.999997
반올림 오류 이외에도 X 좌표가 매번 올바른 방향으로 반경에 따라 이동한다는 점에서 반올림 오류가 발생하지 않습니다. 그러나 다시 - autolayout'd 버튼이보고 중이기 때문에 시작 좌표가 올바르지 않습니다 (268, 268).
Xcode 6에 내장 된 뷰 디버깅을 사용해보십시오. 그렇게하면 버튼 위치와 런타임 제약 조건 및 위치가 표시됩니다. 다음은 Apple 문서에 대한 [link] (https://developer.apple.com/library/ios/recipes/xcode_help-debugger/using_view_debugger/using_view_debugger.html)입니다.이 문서는 Apple 문서의 기본 사용법을 설명합니다. - David L –
언제 수학을하고 있으며 새 버튼을 어떻게 배치하고 있습니까? 몇 가지 코드를 볼 수 있습니까? – jrturton
자동 레이아웃으로 배치 된 뷰는 런타임과 마찬가지로 다른 위치와 마찬가지로 위치를보고합니다. center 속성은 버튼 수퍼 뷰의 좌표 공간에 저장됩니다. – jrturton