iOS解析个人资料图片上的黑条(PFImageView)

Posted

技术标签:

【中文标题】iOS解析个人资料图片上的黑条(PFImageView)【英文标题】:iOS parse black strip on profile picture (PFImageView) 【发布时间】:2015-08-30 20:10:42 【问题描述】:

我正在使用 Parse 作为我的应用程序的后端,并且个人资料照片似乎没有正确显示,如图所示:

john_appleseed 的照片上有一条黑色条纹。

这是我保存个人资料图像的代码:

NSData *profileData = UIImagePNGRepresentation(cell1.profileView.image);
PFFile *profileFile = [PFFile fileWithName:@"profilePhoto" data:profileData];
[profileFile saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error)
     
          if (!error)
         
             if (succeeded)
             
                 [user setObject:profileFile forKey:@"profilePhoto"];
                 [user saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error)
                  
                      if (!error)
                      

                      
                      else
                      

                      
                  ];
             
         
     ];

这是我检索图像的方式:(在 PFQueryTableViewController 中)

- (PFQuery *)queryForTable

    //NSLog(@"called");
    NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
    NSString *filter = [defaults objectForKey:@"topicFilter"];
    NSLog(@"queryfortable: %@", filter);
    PFQuery *query = [PFQuery queryWithClassName:@"Questions"];
    [query includeKey:@"user"];
    [query whereKey:@"category" equalTo:filter];
    [query orderByDescending:@"createdAt"];
    return query;


- (PFObject *)objectAtIndexPath:(NSIndexPath *)indexPath

    if (indexPath.section == self.objects.count)
    
        return nil;//this is for the load more cell.
    
    return [self.objects objectAtIndex:indexPath.section];

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object

PFUser *user = [object objectForKey:@"user"];
PFImageView *profileImgView = (PFImageView *)[cell viewWithTag:1];
profileImgView.layer.cornerRadius = profileImgView.frame.size.height/2;
profileImgView.layer.masksToBounds = YES;
PFFile *file = user[@"profilePhoto"];
profileImgView.file = file;
[profileImgView loadInBackground];

有什么想法吗?非常感谢。

【问题讨论】:

从后台看图片是什么样的?这是压缩质量损失的情况还是在后端正确显示?如果是这样,可能只是线程的情况,loadInBackground被异步调用,UI组件需要发生在主线程上 @soulshined 后端的图像非常好。 loadInBackground 确实是异步调用的,但是假设网络很慢,imageView 将只是一个白色的空白视图而不是黑色,直到它被加载。 所以你在后台加载它,当它成功时,你在回调中将someImageView.image设置为个人资料图片 仅供参考,我的第一条评论中有错字。应该说明,如果不是质量损失问题,则可能是线程问题。 @soulshined 我会试一试的。此外,这种情况并非每次都会发生,有时效果很好,有时效果不佳。 【参考方案1】:

您应该在主线程上更新用户界面。由于您在后台加载某些内容,因此您应该通知主线程它需要更新对象。 loadInBackground 正在异步下载文件。

这是一个示例,您可以根据需要进行更改,以说明在回调中更新 UI 组件有其好处;这是基于 Parses 自己的 AnyPic:

NSString *requestURL = file.url; // Save copy of url locally (will not change in block)

[file getDataInBackgroundWithBlock:^(NSData *data, NSError *error) 
    if (!error) 
        //dispatch on main thread
        UIImage *image = [UIImage imageWithData:data];
     else 
        NSLog(@"Error on fetching file");
    
]; 

【讨论】:

我以前用getDataInBackgroundWithBlock,但是看看这篇文章:Loading Images Stored on Parse 是的@GellertLee,无论哪种方式PFFile 都是数据(请参阅here),如果您使用获取“用户”的方法或实际设置@987654328 的方法更新您的问题@ in,我可以根据您的需要对其进行编辑。这是一个“一刀切”的答案 查看我编辑的问题。我在自定义单元格的 xib 中设置了 PFImageView。

以上是关于iOS解析个人资料图片上的黑条(PFImageView)的主要内容,如果未能解决你的问题,请参考以下文章

隐藏 Visual Studio 2022 上的黑条(转到实时可视化树等)

iOS 6 上出现导航栏和表格视图之间的黑条

UITableView 出现奇怪的黑条

Instagram iPhone应用问题

带电容的ios webview,设置安全区域

在 ubuntu 上使用 ffmpeg 裁剪视频中的黑条会改变视频大小