2015-01-13 3 views
0

즉시 업데이트되지 않습니다 :UI 내 코드는 다음과 같습니다 아이폰 OS

var images = [UIImage]() 
var isFirstLoop = true 
for (imageID in self.imageID’s) 
{ 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORIT Y_DEFAULT, 0), { 
     let imageToAdd = self.getImageFromUrlByID(imageID) 
     if isFirstLoop 
     { 
      self.addSubView(imageToAdd) 
      isFirstLoop = false 
     } 
    } 
} 

난 그냥 첫 번째 이미지는 모든 작업이 완료 바로 그 때 하위 뷰으로 추가됩니다 이유를 알아낼 수 없습니다 해요 .... I addSubView를 주 스레드와 함께 dispatch_async의 가능한 조합과 함께 랩핑하려했는데 ... 서브 뷰로 이미지가 추가 될 때까지 나이가 들었다 .. 제발 도와주세요 :) 미리 감사드립니다 !! :)

+0

주 스레드에서 addSubview() 호출을 실행하려는 시도를 게시 할 수 있습니까? – Undo

+0

시도해보십시오 dispatch_async (dispatch_get_main_queue(),^{ // 여기에 코드는 }); – Nitesh

+0

모든 경우에 UI에 UIImageView가 추가되었으므로 추가 된 tapGestureRecognizer를 사용하여 만든 경우 모든 정보가 끝날 때까지 이미지 자체가 표시되지 않기 때문에 그 사실을 알고 있습니다. 투명 UIImageView ...로해야합니다. 나는한다?? –

답변

3

항상 메인 스레드에서 UI를 업데이트하십시오.

+0

모든 경우에 UIImageView가 UI에 추가되었습니다. 추가 된 printTagGestureRecognizer를 사용하여 만들었지 만 모든 이미지가 끝날 때까지 이미지 자체가 나타나지 않기 때문에 알고 있습니다. 투명 UIImageView로 표시됩니다. 나는한다?? –

+0

"추가"는 어디에서 인쇄하고 있습니까? 그것이 로그에 있다면, 그것이 반드시 당신이 메인 스레드에 그것을 추가했다는 것을 의미하지는 않습니다. – AdamPro13

1

실제로 UI를 업데이트하는 곳의 dispatch_get_main_queue 만 포함하십시오. 귀하의 방법을 getImageFromURLByID()이 인터넷에 접속한다고 가정하면, UI 스레드에서 연결을 원하지 않습니다. UI 스레드가 연결을 끊을 수 있기 때문입니다.

for imageID in imageIDs 
{ 
    let imageToAdd = self.getImageFromUrlByID(imageID) 

    if isFirstLoop { 
     dispatch_async(dispatch_get_main_queue() { 
      var imageView = UIImageView(image: imageToAdd) 
      imageView.frame = someFrame 
      self.addSubView(imageView) 
     } 
     isFirstLoop = false 
    } 
} 
+0

모든 경우에 UIImageView가 UI에 추가되었습니다. 추가 된 printTagGestureRecognizer를 사용하여 만들었지 만 모든 이미지가 끝날 때까지 이미지 자체가 표시되지 않기 때문에 그 사실을 알고 있습니다. 투명 UIImageView ...로해야합니다. 나는한다?? –

+0

UIImage를 하위보기로 추가 할 수 없습니다. 그것은 UIImageView에 보관해야합니다. 업데이트 된 코드는 많은 UIImageViews를 생성하지만, 클래스 변수로 하나를 생성하고 이미지를'self.imageView.image = imageToAdd'로 설정할 수도 있습니다. – Ian

+0

위의 코드는 위의 코드는 단순화 된 버전입니다. 내가 UIImageView를 추가하는 것을 잊어 버렸습니다. 그래서 UIImageView를 추가하는 것을 잊어 버렸습니다. UIImageView가 메인 뷰에 추가되었지만, 그 안에있는 이미지는 모든 태스크가 나타날 때까지 표시되지 않습니다. dispatch_get_main_queue()를 사용하더라도 완료됩니다. –