2017-03-10 1 views
0

지금까지 난 당신이 아래의 그림에서 볼 수있는 왼쪽 막대 버튼 항목을 달성하기 위해 노력 해왔다 : 나는 스타일로 코딩하지 않은장소 사진 URL에서 탐색 막대 버튼 항목으로

enter image description here

을 프로파일 그림을 얻기위한 기본 코드가됩니다. 여기있다 : 나는 다음과 같은 기능을 사용하여 중포 기지에서 내 사진을 검색하고

let user = FIRAuth.auth()?.currentUser 
var profilePicture: UIImageView? 

override func viewDidLoad() { 
    //left bar button item setup 

    if let profileURL = self.user?.photoURL?.absoluteString { 
     let profilePictureUrl = NSURL(string: profileURL) 
     profilePicture?.af_setImage(withURL: profilePictureUrl as! URL) 

     let barButton = UIBarButtonItem(image: profilePicture?.image, landscapeImagePhone: nil, style: .done, target: self, action: #selector(revealBackClicked)) 
     self.navigationItem.leftBarButtonItem = barButton 
    } 


} 

: 내 출력을 인쇄하여 테스트로 나는 URL을 수신하고

self.user?.photoURL?.absoluteString 

. 그러나 문제는 내가 profilepicture 변수에 이미지를 설정할 때 그 것이 인쇄 될 때 nil을 받기 때문입니다.

도움이 될 것입니다.

+0

는'photoURL' 이미'URL'이다. 왜 'absoluteString'을 얻고, NSURL을 만들고 (Swift 3에서는 사용하지 마십시오.)'URL '로 변환할까요? 3 단계를 낭비했습니다. – rmaddy

+0

예상되는 문자열 반환 유형이 있으므로. –

+0

예상되는 문자열의 반환 유형은 무엇입니까? 다음과 같이하면됩니다 :'let profileURL = self.user? .photoURL? {profilePicture? .af_setImage (withURL : profileURL) ...'불필요한 변환 및 캐스트가 필요하지 않습니다. – rmaddy

답변

1

여전히 이미지를 다운로드하면서 UIBarButtonItem에 이미지를 설정하려고 할 때 문제가 발생합니다. 이미지를 다운로드 한 다음 이미지를 UIBarButtonItem으로 설정해야합니다.

let profilePictureUrl = NSURL(string: profileURL) 

let downloader = ImageDownloader() 
let urlRequest = URLRequest(url: profilePictureUrl) 

downloader.download(urlRequest) { response in 
    if let image = response.result.value { 
     let barButton = UIBarButtonItem(image: image, landscapeImagePhone: nil, style: .done, target: self, action: #selector(revealBackClicked)) 
     self.navigationItem.leftBarButtonItem = barButton 
    } 
} 
+1

안녕하세요, 당신의 영혼은 효과가 없었습니다. 이미지에 여전히 –

+0

@RohanVasishth가로드되지 않습니다. 아마도 다운로더를 강력하게 참조하지 않았기 때문입니까? alamofire 문서를 참조하십시오 : 'ImageDownloader 인스턴스에 대한 강력한 참조를 유지하십시오. 그렇지 않으면 완료 폐쇄가 호출되기 전에 다운로더 참조가 범위를 벗어나기 때문에 완료 폐쇄가 호출되지 않습니다 .' –

0
let user = FIRAuth.auth()?.currentUser 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let profilePictureURL = self.user?.photoURL 

    DispatchQueue.global().async { 
     let data = try? Data(contentsOf: profilePictureURL!) 
     DispatchQueue.main.async { 
      let button = UIButton.init(type: .custom) 
      button.setImage(UIImage(data: data!), for: UIControlState.normal) 
      button.layer.cornerRadius = 0.5 * button.bounds.size.width 
      button.clipsToBounds = true 
      button.addTarget(self, action: #selector(UserGroupsMainViewController.profileButtonPressed), for: UIControlEvents.touchUpInside) 
      button.frame = CGRect(x: 0, y: 0, width: 50, height: 50) 

      let barButton = UIBarButtonItem(customView: button) 
      self.navigationItem.leftBarButtonItem = barButton 

     } 
    } 

} 

func profileButtonPressed() { 

    print("Show Profile") 
} 
관련 문제