2013-08-03 15 views
0

我已經爲所有iOS設備創建了以下代碼。它檢測屏幕尺寸併爲每種設備尺寸使用適當的圖像。雖然這有效,但它遠非理想。對於每張圖片,我需要將其保存爲5種不同的尺寸。有什麼更好的方法來做到這一點?我應該基本上有一個背景(這是重複的),一箇中心的小圖標和一些文字。我可以使用正確尺寸的字體生成文本,並使用單獨的圖像視圖大小而不是具有40個以上的圖像。如果這是我應該這樣做的......我怎樣才能讓背景圖像視圖在屏幕邊緣流動而不拉伸背景圖像並使其看起來扭曲?有更好的選擇嗎?在多臺設備上的iOS最佳幻燈片練習

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    UIButton *beginIntro = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [beginIntro addTarget:self 
        action:@selector(begin:) 
     forControlEvents:UIControlEventTouchDown]; 
    [beginIntro setTitle:@"Begin Intro" forState:UIControlStateNormal]; 
    beginIntro.frame = CGRectMake(80.0, 310.0, 160.0, 40.0); 
    [[self view] addSubview:beginIntro]; 

    UIButton *reset = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [beginIntro addTarget:self 
        action:@selector(reset:) 
     forControlEvents:UIControlEventTouchDown]; 
    [reset setTitle:@"Reset Intro" forState:UIControlStateNormal]; 
    reset.frame = CGRectMake(80.0, 410.0, 160.0, 40.0); 
    [[self view] addSubview:reset]; 

    _SlideImageView = [[UIImageView alloc]initWithFrame:CGRectMake([[UIScreen mainScreen]bounds].origin.x, [[UIScreen mainScreen]bounds].origin.y, [[UIScreen mainScreen]bounds].size.width, [[UIScreen mainScreen]bounds].size.height)]; 
    [[self view]addSubview:_SlideImageView]; 
    [self setSlideNumber:[NSNumber numberWithInt:1]]; 
} 
-(IBAction)begin:(id)sender{ 
    if ([_SlideNumber intValue] <=8) { 

     UIImage * toImage = [UIImage imageNamed:[self getSlideShowImageName]]; 
     [UIView transitionWithView:self.view 
          duration:5.0f 
          options:UIViewAnimationOptionTransitionCrossDissolve 
         animations:^{ 
          self.SlideImageView.image = toImage; 
         } completion:^(BOOL finished) { 
          sleep(2); 
          [self begin:nil]; 
         }]; 


     int SlideNumber = [_SlideNumber intValue]; 
     int NewSlideNumber = SlideNumber+=1; 
     [self setSlideNumber:[NSNumber numberWithInt:NewSlideNumber]]; 
    } 

} 
-(NSString*)getSlideShowImageName{ 
    NSString * slideShowImageName = [NSString stringWithFormat:@""]; 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
    { 
     CGFloat scale = [[UIScreen mainScreen] scale]; 

     if (scale > 1.0) 
     { 
      //iPad retina screen 
      slideShowImageName = [NSString stringWithFormat:@"ipad%[email protected]",[_SlideNumber intValue]]; 
     } 
     else 
     { 
      //iPad screen 
      slideShowImageName = [NSString stringWithFormat:@"ipad%d.png",[_SlideNumber intValue]]; 
     } 
    } 
    else 
    { 
     if ([UIScreen instancesRespondToSelector:@selector(scale)]) 
     { 
      CGFloat scale = [[UIScreen mainScreen] scale]; 

      if (scale > 1.0) 
      { 
       if([[ UIScreen mainScreen ] bounds ].size.height == 568) 
       { 
        //iphone 5 
        slideShowImageName = [NSString stringWithFormat:@"iphone5%d.png",[_SlideNumber intValue]]; 
       } 
       else 
       { 
        //iphone retina screen 
        slideShowImageName = [NSString stringWithFormat:@"iphoneipod%[email protected]",[_SlideNumber intValue]]; 
       } 
      } 
      else 
      { 
       //iphone screen 
       slideShowImageName = [NSString stringWithFormat:@"iphoneipod%d.png",[_SlideNumber intValue]]; 
      } 
     } 
    } 
    NSLog(@"slideShowImageName : %@",slideShowImageName); 
    return slideShowImageName; 
} 
-(IBAction)reset:(id)sender{ 
    [self setSlideNumber:[NSNumber numberWithInt:0]]; 
    [self begin:nil]; 
} 

回答

0

爲了讓您的背景圖像「重複」來填滿整個屏幕,創建一個與背景圖像一個UIColor,並設置視圖背景色是顏色。例如:

UIColor *myBackgroundPattern = [UIColor colorWithPatternImage:[UIImage imageNamed:@"myBackgroundPatternImageFilename"]]; 
myView.backgroundColor = myBackgroundPattern; 

請注意,如果圖像文件是png,則不需要添加擴展名。

編輯:

要使用單個圖像以填充背景沒有「拉伸」:

myImageView.image = [UIImage imageNamed:@"MyBackgroundImageFilename"]; 
myImageView.contentMode = UIViewContentModeCenter; 

假定圖像是至少一樣大最大設備顯示,這將是居中並剪切到myImageView的邊界。

+0

它不是一個重複的模式,這是一個檯面如此相同的外觀,但它不會匹配我基本上想要的ipad視網膜圖像只是放在所有其他方面,因爲它只是忽略屏幕上的事情。 – BDGapps

+0

好吧,爲了在所有情況下只使用單個圖像,請將視圖的「contentMode」設置爲「UIViewContentModeCenter」,它將圖像居中並剪切到視圖的邊界。 – bobnoble