有一个令人费解的问题.我有一个通用的应用程序,在iPad和iPhone版本之间有很多共享代码.在nib中有不同的布局,但基本上是相同的视图和视图层次结构 - 一个UIView用作两个兄弟UITextViews的容器.
UIView的MAINVIEW儿童:
UITextView的passageTextView
的UITextView notesTextView
一个UITextView被隐藏,另一个可见.
以下是我的代码.注释掉的部分是我原来的动画尝试.这在iPad上可以正常工作,但在iPhone上却没有.使用文档中建议的方法,取消注释部分为2.未注释的代码在iPad或iPhone上都不起作用 - 它隐藏/取消隐藏我的视图但没有任何动画.如果我将代码添加到也被执行的完成块,那么它正在做某事,而不是动画.
/*
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:mainView cache:YES];
passageTextView.hidden = YES;
notesTextView.hidden = NO;
[UIView commitAnimations];
*/
UIViewAnimationOptions options = UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationTransitionFlipFromRight;
[UIView transitionWithView:mainView
duration:1.0
options:options
animations:^{ passageTextView.hidden = YES; notesTextView.hidden = NO; }
completion:NULL];
Run Code Online (Sandbox Code Playgroud)
编辑:仍然在解决这个问题,希望有人有一个建议.
其他更新
弄清楚为什么以下不适用于iPhone:
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:mainView cache:YES];
passageTextView.hidden = YES;
notesTextView.hidden = NO;
[UIView commitAnimations];
Run Code Online (Sandbox Code Playgroud)
我忽略了将视图连接到Interface Builder中的mainView.几个小时的调试,我刚考虑检查.
但是,我仍然不知道为什么动画块不能用于iPhone或iPad.我已经尝试了几种方法,但即使显示/隐藏正在工作,我也没有得到任何动画.
在ios动画中[UIView animatWithDuration...]如何在动画期间拦截动画值?
这是我目前的(不工作)解决方案:
#import "FooterSelectionView.h"
#import <QuartzCore/QuartzCore.h>
@implementation FooterSelectionView
@synthesize displayLink;
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
// Initialization code
selector = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"selector.png"]];
[self addSubview:selector];
[self setSelectorFrame:CGRectMake(700, 0, selector.frame.size.width, selector.frame.size.height)];
}
return self;
}
- (void)drawRect:(CGRect)rect
{
UIImage *bg = [UIImage imageNamed:@"overlayArea.png"];
[bg drawInRect:CGRectMake(0, 0, 957, 127) blendMode:kCGBlendModeNormal alpha:1];
[selector.image drawInRect:selector.frame blendMode:kCGBlendModeOverlay alpha:1];
}
-(void)step {
[self setNeedsDisplay];
NSLog(@"%@", @"step");
}
- (void)setSelectorFrame:(CGRect)frame {
displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(step)];
[displayLink …Run Code Online (Sandbox Code Playgroud) 我试图使用几个CGAffineTransforms和CGAffineTransformConcats.将动画串起来.我试图实现的总体目标是让我的图像旋转45度,同时向上移动50像素,然后再向下旋转45度.
CGAffineTransform translateUp = CGAffineTransformMakeTranslation(0, -50);
CGAffineTransform firstSpin = CGAffineTransformMakeRotation(M_PI_4);
CGAffineTransform translateDown = CGAffineTransformMakeTranslation(0, 50);
CGAffineTransform secondSpin = CGAffineTransformMakeRotation(M_PI_4);
CGAffineTransform transform1 = CGAffineTransformConcat(translateUp, firstSpin);
CGAffineTransform transform2 = CGAffineTransformConcat(translateDown, secondSpin);
CGAffineTransform transformFull = CGAffineTransformConcat(transform1, transform2);
[UIView beginAnimations:@"MoveAndRotate" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.5];
mainCharacterImage.transform = transformFull;
[UIView commitAnimations];
Run Code Online (Sandbox Code Playgroud)
现在请注意,我对CG相关的所有内容都很陌生,但我不明白为什么这不起作用.
但是我不认为这不是一个事实,这不是一个奇怪的部分,我的问题主要是,任何人都可以解释为什么上面的代码导致我的图像不仅向上移动和旋转,而是移动右边大约100个像素?
任何建议都非常感谢!
cocoa-touch objective-c cgaffinetransform uiviewanimation ios
我试图通过在视图加载后来回改变alpha级别来制作一个有图像的uibutton缓慢脉动...
目前我这样做但它没有做任何事....
-(void)loopdyloop
{
while ( myCount < 1000 )
{
[UIView animateWithDuration:3.0
delay:0.0f
options:UIViewAnimationCurveEaseOut
animations:^{
iconButton.alpha = 0.0;
} completion:^(BOOL finished) {
if (finished) {
NSLog(@"animated");
}
}];
[UIView animateWithDuration:3.0
delay:0.0f
options:UIViewAnimationCurveEaseOut
animations:^{
iconButton.alpha = 1.0;
} completion:^(BOOL finished) {
if (finished) {
NSLog(@"animated");
}
}];
myCount++;
}
}
Run Code Online (Sandbox Code Playgroud)
从viewdidload方法调用此方法,
我知道但是我最好的尝试,如果你对如何实现这一点有任何想法,我将不胜感激.
我在UITableview的自定义单元格中有TextField.我的Tableview是MainView的下半部分所以当我在CustomCell键盘上单击TextField时出现哪个HIde我的textfield.My下面的图像显示我的问题

在这里我有一个代码,当我在MainView.please中有UITextField时,编辑下面的代码,因为我想要整个视图动画,当我点击UITextfield.
-(void)textFieldDidBeginEditing:(UITextField *)textField {
if (textField.tag > 0) {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:0.5];
[UIView setAnimationBeginsFromCurrentState:YES];
self.view.frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y-165.0,
self.view.frame.size.width, self.view.frame.size.height);
[UIView commitAnimations];
}
}
-(void)textresign{
[[self.view viewWithTag:1]resignFirstResponder];
}
-(void)textFieldDidEndEditing:(UITextField *)textField {
if (textField.tag > 0) {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:0.5];
[UIView setAnimationBeginsFromCurrentState:YES];
self.view .frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y+165.0,
self.view.frame.size.width, self.view.frame.size.height);
[UIView commitAnimations];
}
}
Run Code Online (Sandbox Code Playgroud)
但我不知道如何修复它为我的自定义单元格UITextField.Any帮助将被适用.
我有两个图像mosha1和mosha2.我通过UIView动画将它们从某个位置移动到另一个点(206,89).现在我希望如果用户在移动时触摸任何图像,那么该图像的移动将在那里停止.所以我设置了停止动画运动的代码:
[mosha1.layer removeAllAnimations];
Run Code Online (Sandbox Code Playgroud)
此方法调用会停止图像的移动,但是然后它会显示在点(206,89)中.但它应该出现在用户触摸的确切位置.怎么解决这个?
UIView动画方法:
-(void)moshaMoveUp: (UIImageView *)mosha {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:3.0];
[UIView setAnimationDelay:0];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDelegate:self];
mosha.center = CGPointMake(206, 89);
[UIView commitAnimations];
}
Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我使用的UIView是包含UITableView,Buttons并Labels在其中.它创建使用Storyboard.当用户单击导航栏按钮时,UIView将显示从顶部到特定高度的动画,如果再次单击它,则会隐藏带有动画的UIView(从该高度到顶部).同样的UIActionView.
如果没有记录,它可以正常工作UITableView.但如果它有任何记录,则调用[self hideBasket]UIView时会从视图底部显示到顶部(Not Hidden).
//隐藏篮子代码
-(void)hideBasket{
/*Finished Hiding the Basket
[self.view sendSubviewToBack:_shoppingCartView];
[_shoppingCartView setHidden:YES];
_isShoppingCartSeen = NO;*/
CGRect basketFrame = _shoppingCartView.frame;
basketFrame.origin.y = -basketFrame.size.height;
[UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{
_shoppingCartView.frame = basketFrame;
} completion:^(BOOL finished) {
// Finished Hiding the Basket
//[self.view sendSubviewToBack:_shoppingCartView];
// [_shoppingCartView setHidden:YES];
_isShoppingCartSeen = NO;
}];
Run Code Online (Sandbox Code Playgroud)
//显示篮子代码
-(void)showBasket{
/*[self.view bringSubviewToFront:_shoppingCartView];
[_shoppingCartView setHidden:NO];
_isShoppingCartSeen = YES;*/
CGRect basketFrame = …Run Code Online (Sandbox Code Playgroud) 顺时针旋转按钮360度,然后逆时针将动画反转为360.但不动画...动画始终是360顺时针方向.
func animateShowingOfMenu(){
let angle = CGFloat(180 * M_PI / 180)
UIView.animateWithDuration(0.4
, animations: { () -> Void in
self.blurView.hidden=false
self.menuBtn.transform = CGAffineTransformMakeRotation(angle)
self.menuBtn.transform = CGAffineTransformMakeRotation(0)
}) { (completion) -> Void in
print("compeleted")
}
}
func animateHidingOfMenu(){
let angle = CGFloat(-180 * M_PI / 180)
UIView.animateWithDuration(0.4
, animations: { () -> Void in
self.blurView.hidden = true
self.menuBtn.transform = CGAffineTransformMakeRotation(angle)
self.menuBtn.transform = CGAffineTransformMakeRotation(0)
}) { (completion) -> Void in
}
}
Run Code Online (Sandbox Code Playgroud) 我正在快速学习,我成功地能够执行UIView如下代码的弹出动画,但现在我想要反转它.即UIView动画的方式应该回到按钮点击,就像视图正在缩小然后消失.
popupView.isHidden = false
popupInnerView.isHidden = false
popupInnerView.transform = CGAffineTransform(scaleX: 0, y: 0)
UIView.animate(withDuration: 1, delay: 0, options: .curveLinear, animations: {
self.popupView.alpha = 1.0;
self.popupInnerView.transform = .identity
}, completion: nil)
Run Code Online (Sandbox Code Playgroud) 我已经通过自动布局和约束设置了2个文本。现在我想将文本1移到右边,将文本2移到左边,但是没有用。两个文本均应在视图中心(水平)结束
@IBOutlet weak var Text1: UILabel!
@IBOutlet weak var Text2: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
UIView.animate(withDuration: 5, delay: 0, options: [.beginFromCurrentState],
animations: {
self.Text1.frame.origin.x += 300
self.Text2.frame.origin.x -= 300
self.view.layoutIfNeeded()
}, completion: nil)
// Do any additional setup after loading the view.
}
Run Code Online (Sandbox Code Playgroud)
我在代码中做错了什么吗?
uiviewanimation ×10
ios ×9
iphone ×3
objective-c ×3
swift ×3
uiview ×3
uibutton ×2
cocoa-touch ×1
ios7 ×1
keyboard ×1
swift2 ×1
uilabel ×1
uitextfield ×1
xcode ×1