İki etikete sahip bir görünüm var. Sola kaydırdığımda, bir sonraki içeriği metin etiketlemek için doldururum. Benzer şekilde hızlıca kaydırarak önceki içerikler. Etiketler, sağa veya sola kayıyor gibi bir efekt vermek istiyorum. Daha önce bir kaydırma görünümü kullandım, ancak bir bellek sorunu vardı. Bu yüzden bir görünüm kullanıyorum ve sonraki veya önceki içeriğe ait jest yüklerini kaydırıyorum. Etiketler için scrollview'in kayma efektini eklemek istiyorum. Bunu nasıl yapabilirim?iOS'ta kaydırma hareketi ile kaydırma efekti
cevap
Tam olarak aradığınız etkiyi tam olarak bilmiyorum, ancak böyle bir şey yapabilirdiniz, bu da yeni, geçici bir etiket oluşturur, ekrandan çıkarır, üzerindeki etiketin üzerine hareket ettirir. ekranı ve sonra bittiğinde, eski olanı sıfırlar ve geçici etiketi siler. Bu animasyon onun Superview göre etiket animasyon
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
UISwipeGestureRecognizer *left = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(leftSwipe:)];
[left setDirection:UISwipeGestureRecognizerDirectionLeft];
[self.view addGestureRecognizer:left];
// if non-ARC, release it
// [release left];
self.label1.text = @"Mo";
}
- (void)leftSwipe:(UISwipeGestureRecognizer *)gesture
{
NSString *newText;
UILabel *existingLabel = self.label1;
// in my example, I'm just going to toggle the value between Mo and Curly
if ([existingLabel.text isEqualToString:@"Curly"])
newText = @"Mo";
else
newText = @"Curly";
// create new label
UILabel *tempLabel = [[UILabel alloc] initWithFrame:existingLabel.frame];
[existingLabel.superview addSubview:tempLabel];
tempLabel.text = newText;
// move the new label off-frame to the right
tempLabel.transform = CGAffineTransformMakeTranslation(tempLabel.superview.bounds.size.width, 0);
// animate the sliding of them into place
[UIView animateWithDuration:0.5
animations:^{
tempLabel.transform = CGAffineTransformIdentity;
existingLabel.transform = CGAffineTransformMakeTranslation(-existingLabel.superview.bounds.size.width, 0);
}
completion:^(BOOL finished) {
existingLabel.text = newText;
existingLabel.transform = CGAffineTransformIdentity;
[tempLabel removeFromSuperview];
}];
// if non-ARC, release it
// [release tempLabel];
}
: Bu gibi olmayan bir autolayout uygulama görünebilir budur. superview
'un "alt görünümleri kırp" olarak ayarlandığından emin olmak isteyebilirsiniz. Bu şekilde, animasyon biraz daha parlak bir görünüm kazandıran superview
'un sınırlarıyla sınırlandırılacaktır.
Not: Otomatik düzen kullanılıyorsa, fikir aynıdır (yürütme daha karmaşık olsa da). Temel olarak kısıtlamalarınızı yeni görünümün sağa kapalı olmasını sağlayacak şekilde yapılandırın, daha sonra animasyon bloğunda, orijinal etiketin sola ve yeni etiket orijinal etiketin bulunduğu yere kadar olan kısıtlamaları güncelleştirin/değiştirin ve son olarak, Tamamlama bloğu, orijinal etiketin kısıtlamalarını sıfırlar ve geçici etiketi kaldırır.
- (void)leftSwipe:(UISwipeGestureRecognizer *)gesture
{
NSString *newText;
UILabel *existingLabel = self.label1;
// in my example, I'm just going to toggle the value between Mo and Curly
if ([existingLabel.text isEqualToString:@"Curly"])
newText = @"Mo";
else
newText = @"Curly";
[UIView transitionWithView:existingLabel // or try `existingLabel.superview`
duration:0.5
options:UIViewAnimationOptionTransitionFlipFromRight
animations:^{
existingLabel.text = newText;
}
completion:nil];
}
Detaylı cevabınız için çok teşekkür ederim. Animasyon şimdi tamam. Ancak scrollview'in animasyonu daha iyi. Kaydırma görünümünde sorun: İç kaydırma görünümünde başka bir görünüm var. Kullanıcıya her kaydırıldığında, kaydırma görünümüne yeni bir görünüm eklenir. Ancak 50 kez görüntülendikten sonra uygulama, bellek uyarısıyla kilitleniyor. Bir şey denedim ama bir çözüm bulamadım. Böylece kaydırma görünümünü kaldırmaya karar verdim. – Oktay
@Oktay, scrollview kodunuzda basit bir hata/sızıntı varmış gibi geliyor. Bir çok insan sorunsuz bir şekilde gezinme kullanmaktadır. Yine, kodunuzu gönderirseniz, kolayca giderilebileceğinden şüpheleniyorum. – Rob
@Oktay Kaydırma görünümü animasyonunu daha iyi sevdiğini söylüyorsunuz, ancak bu konuda neleri beğendiğinizden emin değilim. Bir pan hareketi kullandığı için (yani parmağınızı ekran üzerinde hareket ettirmeye başlar başlamaz hareket eden sürekli bir harekettir)? Bir pan jestinden ziyade tokatlamak bir jest yaptım çünkü başlığınız bunu önerdi, ama sürekli bir pan hareketi çok kolay. Ya da tercih ettiğiniz scrollview hakkında başka bir şey var mı? – Rob
sen yani daha bir kaydırma görünümü gibi davranır animasyon (tercih ederseniz,: Eğer geçişler inşa biri alışıklarsa
arada, bunların hepsi son derece daha kolaydır bir kap UIVie içinde
- (void)viewDidLoad
{
[super viewDidLoad];
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panHandler:)];
[self.view addGestureRecognizer:pan];
self.label1.text = @"Mo";
}
- (void)panHandler:(UIPanGestureRecognizer *)sender
{
if (sender.state == UIGestureRecognizerStateBegan)
{
_panLabel = [[UILabel alloc] init];
// in my example, I'm just going to toggle the value between Mo and Curly
// you'll presumably set the label contents based upon the direction of the
// pan (if positive, swiping to the right, grab the "previous" label, if negative
// pan, grab the "next" label)
if ([self.label1.text isEqualToString:@"Curly"])
_newText = @"Mo";
else
_newText = @"Curly";
// set the text
_panLabel.text = _newText;
// set the frame to just be off screen
_panLabel.frame = CGRectMake(self.label1.frame.origin.x + self.containerView.frame.size.width,
self.label1.frame.origin.y,
self.label1.frame.size.width,
self.label1.frame.size.height);
[self.containerView addSubview:_panLabel];
_originalCenter = self.label1.center; // save where the original label originally was
}
else if (sender.state == UIGestureRecognizerStateChanged)
{
CGPoint translate = [sender translationInView:self.containerView];
if (translate.x > 0)
{
_panLabel.center = CGPointMake(_originalCenter.x - self.containerView.frame.size.width + translate.x, _originalCenter.y);
self.label1.center = CGPointMake(_originalCenter.x + translate.x, _originalCenter.y);
}
else
{
_panLabel.center = CGPointMake(_originalCenter.x + self.containerView.frame.size.width + translate.x, _originalCenter.y);
self.label1.center = CGPointMake(_originalCenter.x + translate.x, _originalCenter.y);
}
}
else if (sender.state == UIGestureRecognizerStateEnded || sender.state == UIGestureRecognizerStateFailed || sender.state == UIGestureRecognizerStateCancelled)
{
CGPoint translate = [sender translationInView:self.containerView];
CGPoint finalNewFieldLocation;
CGPoint finalOriginalFieldLocation;
BOOL panSucceeded;
if (sender.state == UIGestureRecognizerStateFailed ||
sender.state == UIGestureRecognizerStateCancelled)
{
panSucceeded = NO;
}
else
{
// by factoring in the velocity, we can capture a flick more accurately
//
// (by the way, I don't like iOS's velocity, because if you stop moving, it records the velocity
// prior to stopping the move rather than noting that you actually stopped, so I usually calculate my own,
// but I'll leave this as is for purposes of this example)
CGPoint velocity = [sender velocityInView:self.containerView];
if (translate.x < 0)
panSucceeded = ((translate.x + velocity.x * 0.5) < -(self.containerView.frame.size.width/2));
else
panSucceeded = ((translate.x + velocity.x * 0.5) > (self.containerView.frame.size.width/2));
}
if (panSucceeded)
{
// if we succeeded, finish moving the stuff
finalNewFieldLocation = _originalCenter;
if (translate.x < 0)
finalOriginalFieldLocation = CGPointMake(_originalCenter.x - self.containerView.frame.size.width, _originalCenter.y);
else
finalOriginalFieldLocation = CGPointMake(_originalCenter.x + self.containerView.frame.size.width, _originalCenter.y);
}
else
{
// if we didn't, then just return everything to where it was
finalOriginalFieldLocation = _originalCenter;
if (translate.x < 0)
finalNewFieldLocation = CGPointMake(_originalCenter.x + self.containerView.frame.size.width, _originalCenter.y);
else
finalNewFieldLocation = CGPointMake(_originalCenter.x - self.containerView.frame.size.width, _originalCenter.y);
}
// animate the moving of stuff to their final locations, and on completion, clean everything up
[UIView animateWithDuration:0.3
delay:0.0
options:UIViewAnimationOptionCurveEaseOut
animations:^{
_panLabel.center = finalNewFieldLocation;
self.label1.center = finalOriginalFieldLocation;
}
completion:^(BOOL finished) {
if (panSucceeded)
self.label1.text = _newText;
self.label1.center = _originalCenter;
[_panLabel removeFromSuperview];
_panLabel = nil; // in non-ARC, release instead
}
];
}
}
Not, ben, hem orijinal etiket yanı sıra yeni etiket üzerinde doğru çıkmadığını ediliyor koyduk: jest sürekli olarak bildiren) ile, aşağıdaki gibi görünebilir w (kapsayıcı olarak adlandırılır, şaşırtıcı derecede yeterli), böylece animasyonu o kapsayıcıya kopyalayabilirim.
- 1. Bir menüde Javascript kaydırma efekti
- 2. Kaydırma hareketi, döndürme yönüne göre karışıklık yaratır
- 3. Yatay tokatlama hareketi ve dikey sayfa kaydırma
- 4. GestureDetector onrollroll ile kaydırma Kaydırma
- 5. iOS Android üzerinde kaydırma efekti gibi
- 6. Bu kaydırma - tetiklenen efekti nasıl alabilirim?
- 7. Pürüzsüz kaydırma efekti iOS'ta bir iframe'de çalışmaz
- 8. kaydırma ekranı ile birlikte kaydırma textarea
- 9. Kaydırma bölümleri rasgele kaydırma
- 10. Kaydırma
- 11. pürüzsüz kaydırma/atalet kaydırma/momentum kaydırma
- 12. jQuery Kaydırma ve kaydırma etkinleştirme
- 13. SplitView Bölmesi'ni açmak için hızlıca kaydırma hareketi ekleme
- 14. Her yeni kaydırma nasıl kontrol edilir ve Apple fareleri sorununu önlersiniz (çoklu kaydırma efekti)
- 15. Kaydırıcı kaydırma çubuğu kaydırma yapmıyor
- 16. Kaydırma ile Sabit Konumlandırma
- 17. kaydırma taşma ile, krom
- 18. Tweetie 2/UITableview'de Facebook benzeri kaydırma hareketi mi?
- 19. Sadece html için kaydırma kaydırma işlevini devre dışı bırakan ancak taşması olan öğeleri koruyarak: kaydırma
- 20. Fullpage.js Kaydırma üzerinde yatay kaydırma
- 21. Canlı duvar kağıdı arka planında paralaks efekti kaydırma
- 22. Android googlemaps V2 - Kaydırma veya kaydırma kaydırma devre dışı bırakma
- 23. iPad kaydırma - kaydırma sırasında hangi olaylar tetiklenir?
- 24. UIPanGestureRecognizer çakışma ile kaydırma gözden geçirme
- 25. Kaydırma görünümünden kaydırma olayına geçiş ScrollView - ScrollView ile kaydırma paneli Google Haritalar gibi
- 26. Yatay kaydırma - Mobil - hızlıca kaydırın?
- 27. Düzgün Kaydırma ile Yapışkan Gezinme
- 28. Android ScrollView ile Yavaş Kaydırma
- 29. raphael.js ile doğrudan kanvas kaydırma
- 30. ScrollPane VBox ile kaydırma yapmıyor
Bu arada, aşağıdaki etiketleri etiketlemenin bir yolunu gösterirken, kaydırma görünümünde neden "bellek sorunu" nuz olduğunu anlamıyorum. Eğer bu kodu gönderirseniz, isterseniz hafıza sorununuzu bulmanıza yardımcı olabiliriz. – Rob
Kapak akışını en iyi şekilde kullanın ve güzel bir görünüm verin – parag