我的應用程序中的視圖系統是高度自定義的,並使用大量基於用戶交互(通過對視圖/圖層應用仿射變換完成旋轉)從縱向到橫向手動旋轉的視圖。可能手動旋轉UIPopoverController的視圖?
我想在這些旋轉的視圖中的一個內呈現彈出窗口,但彈出窗口的方向總是相對於設備的方向出現(即,不相對於視圖)。我猜測答案是否定的,但以防萬一有人有一個聰明的想法:有沒有辦法手動旋轉由UIPopoverController呈現的視圖?
我的應用程序中的視圖系統是高度自定義的,並使用大量基於用戶交互(通過對視圖/圖層應用仿射變換完成旋轉)從縱向到橫向手動旋轉的視圖。可能手動旋轉UIPopoverController的視圖?
我想在這些旋轉的視圖中的一個內呈現彈出窗口,但彈出窗口的方向總是相對於設備的方向出現(即,不相對於視圖)。我猜測答案是否定的,但以防萬一有人有一個聰明的想法:有沒有辦法手動旋轉由UIPopoverController呈現的視圖?
肖恩,我剛剛測試它的踢,是的,它的作品。 它在viewDidAppear做(至少在我的情況)(如果在viewWillAppear中完成的,它被敲回原來的設置。)
這在一個工作就好了(剛纔測試)有酥料餅90度角。即在我的情況下,我的主視圖是縱向模式,並且彈出窗口旋轉90度。
self.navigationController.view.superview.superview.transform = CGAffineTransformMakeRotation (M_PI/2.0);
免責聲明:如果你在所有有興趣嘗試讓您的應用進入商店,該代碼幾乎可以肯定是拒絕的理由。它潛入UIKit的私有API中,就蘋果而言這是一個很大的禁忌。
@RunningPink有正確的想法。根據視圖層次結構的設置,彈出窗口可能會比兩個超級視圖備份更遠。 popover本身就是(私人)類_UIPopover
的一個實例(至少在iOS 5中)。您可以通過找到這樣的觀點:
UIView *possiblePopover = popoverController.contentViewController.view;
while (possiblePopover != nil) {
// Climb up the view hierarchy
possiblePopover = possiblePopover.superview;
if ([NSStringFromClass([possiblePopover class]) isEqualToString:@"_UIPopoverView"]) {
// We found the popover, break out of the loop
break;
}
}
if (nil != possiblePopover) {
// Do whatever you want with the popover
}
在這一過程中,我發現,轉化的觀點往往最終使得酥料餅看起來模糊。我發現原因是popover的superview是另一個名爲UIDimmingView
的私人類的實例,它負責接受popover之外的觸摸並導致popover消失。在調光視圖上執行旋轉移除了我在彈出窗口中看到的模糊。
但是,轉換調光可能會導致怪異,其中窗口的某些部分未被調光視圖「覆蓋」,因此如果窗口的這些部分被輕敲,彈出不會消失。爲了解決這個問題,我將旋轉應用於調光視圖,重置調光視圖的框架以覆蓋屏幕,然後將彈出視圖翻譯到位。
if (nil != possiblePopover) {
// Found the popover view
CGAffineTransform rotation = CGAffineTransformMakeRotation(-M_PI_2);
CGAffineTransform translation = // Whatever translation in necessary here
// Rotate the UIDimming View and reset its frame
[possiblePopover.superview setTransform:rotation];
[possiblePopover.superview setFrame:CGRectMake(0, 0, possiblePopover.superview.frame.size.height, possiblePopover.superview.frame.size.width)];
// Translate the popover view
[possiblePopover setTransform:translation];
}
您是想旋轉彈出窗口還是隻顯示彈出窗口中顯示的內容?你可以通過設置哪些箭頭方向來控制前者。我對後者感興趣,它似乎只是通過抓取內容視圖控制器來工作。 E.g.:
aPopoverController.contentViewController.view.transform = CGAffineTransformMakeRotation(M_PI);
是!看起來你可以做到這一點。我把這個想法做得更遠一些。我將在下面單獨回答。 – Sean 2012-03-15 01:58:27