2014-01-14 100 views
0

我有一個表視圖與背後的圖像視圖。我試圖弄清楚如何模糊表格視圖背後的圖像,類似於打開控制中心時的外觀。iOS 7模糊ImageView背後表視圖

這是我的觀點:

enter image description here

這裏是它的代碼:

#import "ToursAndConferencesViewController.h" 
#import "RSSChannel.h" 
#import "RSSItem.h" 
#import "WebViewController.h" 
#import "DTCustomColoredAccessory.h" 
#import "SVProgressHUD.h" 

@implementation ToursAndConferencesViewController 
{ 
    UIActivityIndicatorView *loadingIndicator; 
} 
@synthesize webViewController; 

- (void)viewDidLoad 
{ 
    UIImageView *background = [[UIImageView alloc]init]; 
    background.image = [UIImage imageNamed:@"plain_app-background.png"]; 

    self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; 
    [self.tableView setBackgroundView:background]; 
    self.title = @"Tours & Conferences"; 

    [[SVProgressHUD appearance]setHudBackgroundColor:[UIColor blackColor]]; 
    [[SVProgressHUD appearance]setHudForegroundColor:[UIColor whiteColor]]; 

    [SVProgressHUD showWithStatus:@"Loading"]; 
    // [SVProgressHUD showWithStatus:@"Loading" maskType:SVProgressHUDMaskTypeGradient]; 
} 

- (void)viewDidDisappear:(BOOL)animated 
{ 
    [SVProgressHUD dismiss]; 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    NSLog(@"%@ found a %@ element", self, elementName); 
    if ([elementName isEqual:@"channel"]) 
    { 
     // If the parser saw a channel, create new instance, store in our ivar 
     channel = [[RSSChannel alloc]init]; 

     // Give the channel object a pointer back to ourselves for later 
     [channel setParentParserDelegate:self]; 

     // Set the parser's delegate to the channel object 
     [parser setDelegate:channel]; 
    } 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    // return 0; 
    NSLog(@"channel items %d", [[channel items]count]); 
    return [[channel items]count]; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return 50; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // return nil; 

    UIImageView *image = [[UIImageView alloc]init]; 
    image.image = [UIImage imageNamed:@"CellImage.png"]; 

    UIImageView *background = [[UIImageView alloc]init]; 
    background.image = [UIImage imageNamed:@"plain_app-background.png"]; 

    UIImageView *highlightedCellImage = [[UIImageView alloc]init]; 
    highlightedCellImage.image = [UIImage imageNamed:@"HighlightedCellImage"]; 

    UIColor *kfbBlue = [UIColor colorWithRed:8.0/255.0f green:77.0/255.0f blue:139.0/255.0f alpha:1]; 
    UIColor *kfbLightBlue = [UIColor colorWithRed:24.0/255.0f green:89.0/255.0f blue:147.0/255.0f alpha:1]; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"]; 
    if (cell == nil) 
    { 
     cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"UITableViewCell"]; 
     cell.textLabel.font=[UIFont systemFontOfSize:16.0]; 
    } 
    RSSItem *item = [[channel items]objectAtIndex:[indexPath row]]; 

    [[cell textLabel]setText:[item title]]; 

    NSLog(@"Date: %@", [item date]); 

    tableView.backgroundColor = [UIColor clearColor]; 
    [self.tableView setSeparatorColor:kfbBlue]; 
    cell.textLabel.backgroundColor = [UIColor clearColor]; 
    cell.textLabel.highlightedTextColor = kfbBlue; 
    cell.textLabel.font = [UIFont fontWithName:@"FranklinGothicStd-ExtraCond" size:20.0]; 
    cell.textLabel.textColor = kfbLightBlue; 
    // cell.backgroundView = image; 
    cell.backgroundColor = [UIColor clearColor]; 
    // cell.selectedBackgroundView = highlightedCellImage; 
    tableView.backgroundView = background; 

    DTCustomColoredAccessory *accessory = [DTCustomColoredAccessory accessoryWithColor:cell.textLabel.textColor]; 
    accessory.highlightedColor = kfbBlue; 
    cell.accessoryView =accessory; 

    return cell; 
} 

- (void)fetchEntries 
{ 
    // Create a new data container for the stuff that comes back from the service 
    xmlData = [[NSMutableData alloc]init]; 

    // Construct a URL that will ask the service for what you want - 
    // note we can concatenate literal strings together on multiple lines in this way - this results in a single NSString instance 
    NSURL *url = [NSURL URLWithString:@"http://kyfbnewsroom.com/category/conferences/feed"]; 

    // Put that URL into an NSURLRequest 
    NSURLRequest *req = [NSURLRequest requestWithURL:url]; 

    // Create a connection that will exchange this request for data from the URL 
    connection = [[NSURLConnection alloc]initWithRequest:req delegate:self startImmediately:YES]; 
} 

- (id)initWithStyle:(UITableViewStyle)style 
{ 
    self = [super initWithStyle:style]; 

    if (self) 
    { 
     [self fetchEntries]; 
    } 

    return self; 
} 

// This method will be called several times as the data arrives 
- (void)connection:(NSURLConnection *)conn didReceiveData:(NSData *)data 
{ 
    // Add the incoming chunk of data to the container we are keeping 
    // The data always comes in the correct order 
    [xmlData appendData:data]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)conn 
{ 
    /* We are just checking to make sure we are getting the XML 
    NSString *xmlCheck = [[NSString alloc]initWithData:xmlData encoding:NSUTF8StringEncoding]; 
    NSLog(@"xmlCheck = %@", xmlCheck);*/ 

    // [loadingIndicator stopAnimating]; 
    [SVProgressHUD dismiss]; 

    // Create the parser object with the data received from the web service 
    NSXMLParser *parser = [[NSXMLParser alloc]initWithData:xmlData]; 

    // Give it a delegate - ignore the warning here for now 
    [parser setDelegate:self]; 

    //Tell it to start parsing - the document will be parsed and the delegate of NSXMLParser will get all of its delegate messages sent to it before this line finishes execution - it is blocking 
    [parser parse]; 

    // Get rid of the XML data as we no longer need it 
    xmlData = nil; 

    // Reload the table.. for now, the table will be empty 
    [[self tableView]reloadData]; 

    NSLog(@"%@\n %@\n %@\n", channel, [channel title], [channel infoString]); 
} 

- (void)connection:(NSURLConnection *)conn didFailWithError:(NSError *)error 
{ 
    // Release the connection object, we're done with it 
    connection = nil; 

    // Release the xmlData object, we're done with it 
    xmlData = nil; 

    [SVProgressHUD dismiss]; 

    // Grab the description of the error object passed to us 
    NSString *errorString = [NSString stringWithFormat:@"Fetch failed: %@", [error localizedDescription]]; 

    // Create and show an alert view with this error displayed 
    UIAlertView *av = [[UIAlertView alloc]initWithTitle:@"Error" message:errorString delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [av show]; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [[webViewController webView]loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]]; 

    // Push the web view controller onto the navigation stack - this implicitly creates the web view controller's view the first time through 
    // [[self navigationController]pushViewController:webViewController animated:YES]; 
    [self.navigationController pushViewController:webViewController animated:YES]; 

    // Grab the selected item 
    RSSItem *entry = [[channel items]objectAtIndex:[indexPath row]]; 

    // Construct a URL with the link string of the item 
    NSURL *url = [NSURL URLWithString:[entry link]]; 

    // Construct a request object with that URL 
    NSURLRequest *req = [NSURLRequest requestWithURL:url]; 

    // Load the request into the web view 
    [[webViewController webView]loadRequest:req]; 
    webViewController.hackyURL = url; 

    // Set the title of the web view controller's navigation item 
    // [[webViewController navigationItem]setTitle:[entry title]]; 
} 

@end 
+0

可能重複[如何申請模糊到一個UIView ?](http://stackoverflow.com/questions/11130923/how-to-apply-blur-to-a-uiview) – Pfitz

回答

3

設置你的tableView到[UIColor clearColor];

然後download apple'sUIImage+ImageEffects包含幫助程序模糊圖像的類別文件。

您可以按照this tutorial代碼樣本圖像模糊

這裏是我的最終結果是揹着我的tableView的圖像:的

The image was apple's galaxy image blurred and scaled a bit

+1

看起來不錯。 – Unheilig

+0

@Unheilig是的,我認爲是什麼讓這真正特別的是我爲頂部和底部的單元格的掩碼,使它看起來更加無縫,而不是有明顯的UITableView邊界輪廓並讓我的文本突然剪切!這讓我非常沮喪,幸運的是那些日子已經結束了。 – Pavan

+0

偉大的工作。通過使用ImageEffects可以實現單元格頂部和底部的遮罩代碼? – Unheilig