У меня есть представление, которое отображает 1 изображение за раз, и это изображение должно быть фоновым изображением. У меня также есть другие элементы поверх этого изображения, которые должны меняться при касании. Представление, которое у меня есть, называется Видеопросмотр, и у меня есть элементы сверху. Все это работает, моя проблема заключается в том, что когда я использую вставитьподвид, все элементы сверху меняются (как и должно быть), но изображение остается прежним (VideoView), и оно должно измениться. Если я заменю InsertSubView на addSubview, то изображение изменится правильно при нажатии, но мои верхние элементы не будут отображаться. Я знаю, что я должен использовать вставитьподвид, и при касании я вижу изменение URL-адреса изображения, но на экране остается первое изображение по умолчанию.
Кажется, я знаю, что может происходить. При каждом нажатии я добавляю новый InsertSubview, и новое изображение может быть за старым изображением. Я проверил, загрузив видео. Сначала у меня было изображение, и когда я нажал, чтобы перейти к следующему экрану, изображение осталось, однако появился звук видео.
class BookViewC: UIViewController{
@IBOutlet weak var VideoView: UIView!
var imageView: UIImageView?
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
// This is how I change images, touchCount number is linked with unique image depending on the number passed in .
for touch in touches {
let location = touch.location(in: self.VideoView)
if location.x < self.VideoView.layer.frame.size.width / 2 {
if touchCount == 0 || touchCount < 0 {
touchCount = 0
} else {
touchCount = touchCount - 1
}
reloadTable(Offset: touchCount)
}
else {
touchCount = touchCount + 1
reloadTable(Offset: touchCount)
}
}
}
func ShowImage(s_image: String) {
let imgURL: NSURL = NSURL(string: s_image)!
let request:NSURLRequest = NSURLRequest(url: imgURL as URL)
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
bookviewImage.imageView = UIImageView(image: UIImage(named: s_image))
bookviewImage.imageView?.frame = VideoView.bounds
bookviewImage.imageView?.contentMode = UIViewContentMode.scaleAspectFill
let task = session.dataTask(with: request as URLRequest, completionHandler: {(data, response, error) in
DispatchQueue.main.async(execute: { () -> Void in
if data != nil {
self.bookviewImage.imageView?.image = UIImage(data: data!)
self.VideoView.insertSubview(self.bookviewImage.imageView!, at: 0)
// self.VideoView.addSubview(self.bookviewImage.imageView!)
} else {
self.bookviewImage.imageView!.image = nil
}
})
});
task.resume()
}
func reloadTable(Offset: Int) {
// send http request
session.dataTask(with:request, completionHandler: {(data, response, error) in
if error != nil {
} else {
do {
let parsedData = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! [String:Any]
if let Streams = parsedData["Results"] as? [AnyObject]?
{
if self.streamsModel.Locations.count >= 0 {
// Get Results
}
DispatchQueue.main.async {
for Stream in Streams! {
if let s_image = Stream["stream_image"] as? String {
self.ShowImage(s_image: s_image)
}
}
}
Это фоновое изображение в InsertSubview не меняется при нажатии, однако, когда я добавляю AddSubview, фоновое изображение меняется, поэтому я знаю, что в моем коде что-то не так, поскольку фоновое изображение InsertSubview не обновляется.
[![ .][2]][2]
Я не уверен, как вы меняете изображения, и, возможно, мне придется увидеть код, чтобы дать лучшее объяснение. А пока вы должны понимать разницу между insertSubview
и addSubview
.
добавить подвид:
addSubview
добавляет представление в конец списка. В иерархической структуре это будет самый нижний элемент. Однако на экране это будет самый верхний элемент, закрывающий все, что находится под ним.
Иерархия будет выглядеть
вставить подвид:
insertSubview
вставляет представление в заданную позицию в списке. Ваш код вставляется в позицию 0. В иерархической структуре это будет самый верхний элемент. Однако на экране это будет самый нижний элемент, закрытый всем, что находится сверху.
Иерархия будет выглядеть
Надеюсь, это поможет.
@ user1591668 Рад быть полезным. Пожалуйста, примите ответ, если проблема решена. Если останется какая-то путаница, дайте мне знать
Я определенно ближе к решению моей проблемы. Я создал более подробный пост. По сути, мое изображение InsertSubview должно меняться по клику, а этого не происходит, хотя все остальное меняется по клику.
Это сработало. Я просто создал образ в ViewDidLoad, а затем вызвал InsertSubview вместо того, чтобы каждый раз создавать новый образ.
Спасибо, это определенно помогает, поэтому, когда я поставил InsertSubview на 1, он скрыл изображение профиля. Я новичок в Swift.