2015-12-18 2 views
-4

Мое приложение извлекает изображение из URL, но мне нужно изменить размер изображения, прежде чем он появится в пользовательском интерфейсе в моем представлении таблицы.нужна помощь об изменении размера изображения swift 2

это мой код в моем tableViewController:

импорт UIKit импорт Firebase импорт Alamofire

класс FeedViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UITextFieldDelegate {

@IBOutlet weak var tableView: UITableView! 
@IBOutlet weak var postField: MaterialTextField! 
@IBOutlet weak var imageSelectorImage: UIImageView! 



var posts = [Post]() 
var imageSelected = false 
var imagePicker: UIImagePickerController! 

static var imageCache = NSCache() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    tableView.delegate = self 
    tableView.dataSource = self 
    postField.delegate = self 

    //tableView.estimatedRowHeight = 400 
    //tableView.rowHeight = UITableViewAutomaticDimension 



    imagePicker = UIImagePickerController() 
    imagePicker.delegate = self 


    DataService.ds.REF_POSTS.queryOrderedByChild("timestamp").observeEventType(.Value, withBlock: { snapshot in 

     self.posts = [] 
     if let snapshots = snapshot.children.allObjects as? [FDataSnapshot] { 
      for snap in snapshots { 
       if let postDict = snap.value as? Dictionary<String, AnyObject> { 
        let key = snap.key 
        let post = Post(postKey: key, dictionary: postDict) 
        self.posts.insert(post, atIndex: 0) 
       } 
      } 

     } 

     self.tableView.reloadData() 
    }) 

    } 
func textFieldShouldReturn(textField: UITextField) -> Bool { 
    textField.resignFirstResponder() 
    return true 
} 


/** 
* Called when the user click on the view (outside the UITextField). 
*/ 
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    self.view.endEditing(true) 
} 

func textFieldDidBeginEditing(textField: UITextField) { 
    animateViewMoving(true, moveValue: 167) 
} 
func textFieldDidEndEditing(textField: UITextField) { 
    animateViewMoving(false, moveValue: 167) 
} 

func animateViewMoving (up:Bool, moveValue :CGFloat){ 
    let movementDuration:NSTimeInterval = 0.1 
    let movement:CGFloat = (up ? -moveValue : moveValue) 
    UIView.beginAnimations("animateView", context: nil) 
    UIView.setAnimationBeginsFromCurrentState(true) 
    UIView.setAnimationDuration(movementDuration) 
    self.view.frame = CGRectOffset(self.view.frame, 0, movement) 
    UIView.commitAnimations() 
} 


func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return posts.count 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let post = posts[indexPath.row] 
    print(post.postDescription) 

    if let cell = tableView.dequeueReusableCellWithIdentifier("PostCell") as? PostCell { 
     cell.request?.cancel() 
     var img: UIImage? 
     if let url = post.imageUrl { 
      img = FeedViewController.imageCache.objectForKey(url) as? UIImage 
     } 

     cell.configureCell(post, img: img) 
     return cell 
    } else { 
     return PostCell() 
    } 
} 

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) { 
    imagePicker.dismissViewControllerAnimated(true, completion: nil) 
    imageSelectorImage.image = image 
    imageSelected = true 
} 

@IBAction func selectImage(sender: UITapGestureRecognizer) { 
    presentViewController(imagePicker, animated: true, completion: nil) 
} 

@IBAction func makePost(sender: AnyObject) { 
    //TODO: Add loading spinner while data is being processed 
    if let txt = postField.text where txt != "" { 
     if let img = imageSelectorImage.image where imageSelected == true { 
      let urlStr = URL_IMGSHACK 
      let url = NSURL(string: urlStr)! 
      //FIXME: Add error handling 
      let imgData = UIImageJPEGRepresentation(img, 0.2)! 
      let keyData = API_KEY_IMG.dataUsingEncoding(NSUTF8StringEncoding)! 
      let keyJSON = "json".dataUsingEncoding(NSUTF8StringEncoding)! 

      Alamofire.upload(.POST, url, multipartFormData: { multipartFormData in 

       multipartFormData.appendBodyPart(data: imgData, name: "fileupload", fileName: "image", 
        mimeType: "image/jpg") 
       multipartFormData.appendBodyPart(data: keyData, name: "key") 
       multipartFormData.appendBodyPart(data: keyJSON, name: "format") 

       }) { encodingResult in 

        switch encodingResult { 
        case .Success(let upload, _, _): 
         upload.responseJSON(completionHandler: { response in 
          if let info = response.result.value as? Dictionary<String, AnyObject> { 
          if let links = info["links"] as? Dictionary<String, AnyObject>{ 
           if let imgLink = links["image_link"] as? String { 
             print("LINK: \(imgLink)") 
             self.postToFirebase(imgLink) 
            } 
           } 

          } 
         }) 
        case .Failure(let error): 
         print(error) 
        } 
      } 

     } else { 
      self.postToFirebase(nil) 
     } 
    } 
} 

func postToFirebase(imgUrl: String?) { 
    var post: Dictionary<String, AnyObject> = [ 
     "timestamp": NSNumber(longLong: currentTimeMillis()), 
     "description": postField.text!, 
     "likes": 0 
    ] 

    if imgUrl != nil { 
     post["imageUrl"] = imgUrl! 
    } 

    let firebasePost = DataService.ds.REF_POSTS.childByAutoId() 
    firebasePost.setValue(post) 

    postField.text = "" 
    imageSelectorImage.image = UIImage(named: "camera") 
    imageSelected = false 
    tableView.reloadData() 
    postField.resignFirstResponder() 
} 

func currentTimeMillis() ->Int64 { 
    let nowDouble = NSDate().timeIntervalSince1970 
    return Int64(nowDouble * 1000) 
} 

}

и вот мой заказ клетка:

класс PostCell: UITableViewCell {

@IBOutlet weak var profileImage: UIImageView! 
@IBOutlet weak var showcaseImage: UIImageView! 
@IBOutlet weak var descriptionText: UILabel! 
@IBOutlet weak var likesLabel: UILabel! 
@IBOutlet weak var likeImage: UIImageView! 

var post: Post! 
var request: Request? 
var likeRef: Firebase! 

override func awakeFromNib() { 
    super.awakeFromNib() 

    let tap = UITapGestureRecognizer(target: self, action: "likeTapped:") 
    tap.numberOfTapsRequired = 1 
    likeImage.addGestureRecognizer(tap) 
    likeImage.userInteractionEnabled = true 

} 

override func drawRect(rect: CGRect) { 
    profileImage.layer.cornerRadius = self.profileImage.frame.size.width/2 
    profileImage.backgroundColor = UIColor.clearColor() 
    profileImage.layer.borderWidth = 2 
    profileImage.layer.borderColor = UIColor.whiteColor().CGColor 
    self.profileImage.clipsToBounds = true 
    self.showcaseImage.clipsToBounds = true 

} 

func configureCell(post: Post, img: UIImage?){ 
    self.post = post 
    likeRef = DataService.ds.REF_USERS_CURRENT.childByAppendingPath("likes").childByAppendingPath(post.postKey) 
    self.descriptionText.text = post.postDescription 
    self.likesLabel.text = "\(post.likes)" 

    if post.imageUrl != nil { 

     if img != nil { 
      self.showcaseImage.image = img 
     } else { 

      request = Alamofire.request(.GET, post.imageUrl!).validate(contentType: ["image/*"]).response(completionHandler: { request, response, data, err in 

       if err == nil { 
        let img = UIImage(data: data!)! 
        self.showcaseImage.image = img 
        FeedViewController.imageCache.setObject(img, forKey: self.post.imageUrl!) 
       } else { 
        print(err.debugDescription) 
       } 

      }) 

     } 

    } else { 
     self.showcaseImage.hidden = true 
    } 

    likeRef.observeSingleEventOfType(.Value, withBlock: { snapshot in 

     if let doesNotExist = snapshot.value as? 
      NSNull { 
      //This mean we have not liked this specific post 
      self.likeImage.image = UIImage(named: "heart-empty") 
     } else { 
      self.likeImage.image = UIImage(named: "heart-full") 
     } 

    }) 
} 

func likeTapped(sender: UITapGestureRecognizer) { 
    likeRef.observeSingleEventOfType(.Value, withBlock: { snapshot in 

     if let doesNotExist = snapshot.value as? 
      NSNull { 
      self.likeImage.image = UIImage(named: "heart-full") 
      self.post.adjustLikes(true) 
      self.likeRef.setValue(true) 
     } else { 
      self.likeImage.image = UIImage(named: "heart-empty") 
      self.post.adjustLikes(false) 
      self.likeRef.removeValue() 
     } 
    }) 
} 

}

этот пример для того, что я хочу добиться:

this when user post the portrait image

this when user post the landscape image

Дело в том, что я хочу, чтобы моя ширина изображения всегда соответствовала ширине экрана устройства, а высота uiimage будет динамичной.

поэтому, когда пользователь отправляет любое изображение с любой ориентацией (пейзаж или портрет), изображение будет соответствовать ширине экрана, высота будет динамичной.

, пожалуйста, помогите мне дать деталь, где поставить свой метод, так как я новичок об этом, как достичь того, чего я хочу ... im так отчаянно, уже 1 месяц и им так застрял об этом ...

+2

Я дон В вашем вопросе не видите кода. – rmaddy

ответ

0

Вам нужно добавить ImageView раскадровки из интерфейса строителя в Xcode, то вы можете установить свои ограничения, чтобы соответствовать размеру экрана, & также добавить ограничение высоты, которые вы можете изменить позже, когда вы получите изображение из URL

Смежные вопросы