9

İşte oluyor bunun bir video yer almaktadır: Ben UIImageView (X) görüntü özelliğini değiştirirseniz, TemeldeNeden hücre kaydırılırken UIImageView görüntüsünü değiştirdiğimde tüm görünüm bir saniyeliğine sıfırlanıyor mu?

http://cl.ly/3V0D3U1m3w0E

Ben onların orijinal geri görünümdeki tüm kontrolleri getiriyor kaydırma yerken , istenmeyen konum. (UIImageViews görünümü ve bağımsız dış iken Hepsi, bu yüzden "hücreyi kaydırmak" bir UIView gömülü ediyoruz.)

Ben imajını değiştirmek yoksa:

http://cl.ly/3T1N1G33320G

Kayıt için, kullanıcı belirli bir miktarda tavada kaldığında görüntüyü değiştiriyorum, 80 puan olduğuna inanıyorum.

İşte kod:

// Only allow the cell to be moved 100 pixels left or right 
if (xPos <= 100 && xPos >= -100) { 
    // Move our cell to the xPos we defined 
    CGRect slidingViewFrame = self.slidingView.frame; 
    slidingViewFrame.origin = CGPointMake(xPos - 100, 0); 
    self.slidingView.frame = slidingViewFrame; 

    if (xPos >= 80) { 
     if (_removeIconIsActive == NO) { 
      // Change remove icon to a red, active state and animate the change 
      self.removeIconImageView.image = [UIImage imageNamed:@"remove-icon-active.png"]; 

      _removeIconIsActive = YES; 
     } 

     CGRect removeIconFrame = self.removeIconImageView.frame; 
     removeIconFrame.origin = CGPointMake(40, 35); 
     self.removeIconImageView.frame = removeIconFrame; 
    } 
} 

görünümleri Film şeridinde kurulmuş, ancak hareket ve manipülasyon tüm kodunda yapılır. İşte

film şeridi düzeni aşağıdaki gibidir:

enter image description here

Ve burada hücre kaydırmayı kolları tam bir yöntem vardır: Otomatik Düzen kullanıyorsanız https://gist.github.com/anonymous/c51c7cb2997c89094f08

+0

Daha fazla kod yapıştırmanızı öneririm. – sunkehappy

+0

Film şeridi düzenini ve tüm taranmış hücre kodunu ekledim, daha ne sağlayacağını bilmiyorum. –

+0

Gizli olmayan kodunuzu yeni bir projeye koymanızı ve GitHub'a koymanızı öneriyorum. Yapıştırılan kodunuz sayesinde sorunu bulamıyorum ve bu kodun eksiksiz olmadığını düşünüyorum. – sunkehappy

cevap

6

sen hiç çerçeve özelliğini değiştirerek olmamalı . Çerçeve, bir “yazma” özelliği değil, düzen kısıtlamalarının uygulanmasının sonucudur.

Görünümlerinizin x konumunu belirleyen bir kısıtlamaya sahip olacağınızı varsayalım. Bu kısıtlama için bir IBOutlet oluşturun ve frame'u değiştirmek yerine, kısıtlamanın constant özelliğini değiştirin. Ardından görünümün layoutIfNeeded numaralı telefonunu arayın. Görüntülemelerinizi, kısıtlamaları ve çıkışları hakkında daha görmeden

, sana son kod verir, ancak böyle bir şey ile son bulacak:

self.leftConstraint.constant = xPos - 100.f; 
[self.slidingView setNeedsUpdateConstraints]; 
[self.slidingView layoutIfNeeded]; 

olup bitenlerin Benim yorumlanması olduğunu görüntü ayarı değişiklikleri Kısıtlamaların kendilerini yeniden hesapladığını ve her şeyi başlangıç ​​pozisyonuna geri çeken görüntü görüntüsünün içsel boyutu. Başka bir pikseli kaydırdığınızda, tekrar başladı ve frame özelliği tekrar kazanır.

Yardım edin.

+0

Hikaye panosunda otomatik mizanpajı kontrol etmekten başka, aslında hiçbir yerde * kullanmadım. Bu hala geçerli mi? –

+0

İşte proje, (+ ile etkileşime girecek hücreleri size verecektir) metin ekleme yeteneğine indirgenmiştir. Daha sonra hücreleri kaydırabilir ve sorunu görebilirsiniz. Sağa kaydı, sorunu değiştirerek gösterir. Sola kayma, bir sorunun eksikliğini gösterir. http://cl.ly/2g3X3O083i3l –

+0

Hücreniz açıkça xib'de kısıtlamalar gösteriyor, bu yüzden kullanmadığınız halde hareket ediyorlar. Projenizi indirdim, hikaye tahtanız için devre dışı bırakılmış Otomatik Düzenleme (sağ panelin ilk "sekmesi") ve slayt hareketini test ettim. Videonuzda gösterdiğiniz flaşı göremedim. Tabii ki tüm UI'niz bozuldu, çünkü bunu Interface Builder'da Auto Layout ile tasarladınız. Bu nedenle, ya bir şeyleri hareket ettirmek için Otomatik Düzen'i kullanırsınız ya da tam kullanıcı arayüzünüzü yeniden işlemeniz gerekecektir. – yonosoytu