为什么传入的信息无法显示在屏幕的左侧?

时间:2017-07-29 10:14:32

标签: firebase swift3 firebase-authentication xcode8 jsqmessagesviewcontroller

发送照片信息时出现了一些错误。

enter image description here

我是一个快速语言的初学者。我想创建关于聊天应用程序的本科项目。我需要一些帮助来解决这个问题。到目前为止,一切都顺利进行,但我面临的一个小错误是,当我收到图像时,它不会出现在屏幕的左侧,传入和传出的图像都出现在屏幕的右侧。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Toolbar customToolbar = (Toolbar)findViewById(R.id.toolbarC);
        customToolbar.setBackgroundColor(Color.parseColor("#E21836"));

        TextView mTitle = (TextView) this.findViewById(R.id.toolbar_title);
        mTitle.setText("Hello World");
        mTitle.setSingleLine(true);

        TextView mSubtitle = (TextView) this.findViewById(R.id.toolbar_subtitle);
        mSubtitle.setText("Hello World");
        mSubtitle.setSingleLine(true);
    }
}

1 个答案:

答案 0 :(得分:0)

您只需要了解代码中发生了什么,因为我正在查看您正在重新加载collectionview的代码,然后才完全配置并添加JSQPhotoMediaItemJSQVideoMediaItem个对象将这些MediaItem放入您的消息数组中,因此请确保已完全配置了JSQPhotoMediaItemJSQVideoMediaItem个对象,然后才将这些对象添加到消息数组中。

您可以将其添加到您的开关案例条件

    case "PHOTO":

            let photo = JSQPhotoMediaItem(image: nil)
            let fileUrl = dict["fileUrl"] as! String
            let downloader = SDWebImageDownloader.shared()
            downloader.downloadImage(with: URL(string: fileUrl)!, options: [], progress: nil, completed: { (image, data, error, finished) in
                DispatchQueue.main.async(execute: {
                    photo?.image = image // you have image in your media object
                  if self.senderId == senderId {
                        photo?.appliesMediaViewMaskAsOutgoing = true
                  } else {
                        photo?.appliesMediaViewMaskAsOutgoing = false
                  }
                  // you just configured  media object by using appliesMediaViewMaskAsOutgoing
                  self.messages.append(JSQMessage(senderId: senderId, displayName: senderName, media: photo))
                    // successfully added object into your message array now you should reload collectionview
                    self.collectionView.reloadData()
                })
            })
        //same goes for your video condition

但我仍然建议你逐一遵循每一步。

按照以下步骤添加A JSQPhotoMediaItem对象

  1. 制作一个JSQPhotoMediaItem对象,如

    let photoItem = JSQPhotoMediaItem(image: UIImage(named: <your Image Object>)) 
    

    确保您已从服务器下载了图像并成功将图像对象准备好添加到JSQPhotoMediaItem对象中(当您从firebase下载时)首先获取图像然后将其添加到{{1 }}

  2. 现在您必须告诉您的消息类型(传出或传入),因此根据您的需要添加JSQPhotoMediaItem属性,这样就会出现在您的代码中

    appliesMediaViewMaskAsOutgoing
  3. 现在这是将此对象附加到数组

    的最后一步
            if self.senderId == senderId {
                photoItem?.appliesMediaViewMaskAsOutgoing = true
            } else {
                photoItem?.appliesMediaViewMaskAsOutgoing = false
            }
    
  4. 现在重新加载collectionView,因为您已成功配置媒体项目( self.messages.append(JSQMessage(senderId: senderId, displayName: senderName, media: photoItem))

    JSQPhotoMediaItem
  5. {p>同样适用于 self.collectionView.reloadData() 个对象。