Имам преглед на превъртането с странициране. В viewDidLoad проверявам дали текущата ориентация е ландшафтна, след това задам itsize размер 440
if (UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation]))
{
[scroll setContentSize:CGSizeMake(self.scroll.frame.size.width*numberOfPages,340)];
}
else if (UIDeviceOrientationIsLandscape([[UIDevice currentDevice] orientation]))
{
[scroll setFrame:CGRectMake(0,0,480,480)];
[scroll setContentSize:CGSizeMake(self.scroll.frame.size.width*numberOfPages, 440)];
}
всичко работи добре scrollview свитъци гладка и няма диагонал превъртане.
но когато ориентацията се промени,
аз трябва да настроите scrollview "и рамката и contentize отново и аз съм го настройка, както следва
-(void)orientationChanged:(id)object
{
if(UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation]))
{
self.scroll.frame = [[UIScreen mainScreen]bounds];
[scroll setContentSize:CGSizeMake(self.scroll.frame.size.width*numberOfPages, 340)];
}
else
{
self.scroll.frame = CGRectMake(0,0,480,480);
[scroll setContentSize:CGSizeMake(self.scroll.frame.size.width*numberOfPages, 600)];
}
}
Не мога да разбера защо трябва да задам съдържаниеразмер на височина до 600 в пейзажен режим, и това too not enough.и добавя още един проблем, който scrollview започва да превъртате диагонално, което аз не искам, тъй като изглежда толкова странно.Може ли някой да ми помогне да разберем къде и какво съм липсва?
Имам зададена маска за автоматично оразмеряване на scrollview като
[scroll setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleHeight];
но смяната му не помага.
Отговори:
2 за отговор № 1Тук това е проблем във вашия код. Защо настройвате размера на кадъра така? Имате само размера на екрана 320px width
, И когато се промени landscape
, височината ще бъде само 320px
, Но настройвате свитъка height
като 480px
и то goes out of the screen
и start to scroll diagonally
.
self.scroll.frame = CGRectMake(0,0,480,480);
Вместо този размер на рамката, променете по този начин
self.scroll.frame = CGRectMake(0,0,480,320);
И трябва да настроите размер на съдържанието зависи от съдържание вие имате в рамките на превъртете изгледа в ориентация.
5 за отговор № 2
Не използвайте
UIDeviceOrientation
, употребаUIInterfaceOrientation
вместо.DeviceOrientation
има две допълнителни опции, от които не се нуждаете тук. (UIDeviceOrientationFaceUp
иUIDeviceOrientationFaceDown
)връщане
Yes
отshouldAutorotateToInterfaceOrientation
Сега
willRotateToInterfaceOrientation: duration:
ще се извиква всеки път, когато завъртите устройството си.Изпълнете този метод по този начин.
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { CGRect frame; int pageNumber = 2; int statusBarHeight = 20; if ((toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) || (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)) { frame = CGRectMake(0, 0, 480, 320 - statusBarHeight); } else { frame = CGRectMake(0, 0, 320, 480 - statusBarHeight); } scrollView.frame = frame; scrollView.contentSize = CGSizeMake(frame.size.width * 2, frame.size.height); }
Позволявам,
pageNumber = 2
statusBarHeight = 20