- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图在应用程序运行时在图像上创建一个点,然后尝试将该点缓慢移动到不同的位置。这是我的代码。该代码可以工作,但有两个问题。
首先,处理已经在窗口加载之前发生,因此我只能看到最终的结果。(我想显示一个点移动到图像中的另一个点)
第二,当我创建一个新点时,前一个点并没有被删除。所以它看起来不像是在移动,而是看起来像是在重复。如何删除一个点。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
NSGraphicsContext* gc = [NSGraphicsContext currentContext];
// Save the current graphics context settings
[gc saveGraphicsState];
// Set the color in the current graphics context for future draw operations
[[NSColor blackColor] setStroke];
[[NSColor redColor] setFill];
for(int i=1;i<100;i++){
NSRect rect = NSMakeRect(130+i, 130, 10, 10);
NSBezierPath* circlePath = [NSBezierPath bezierPath];
[circlePath appendBezierPathWithOvalInRect: rect];
// Outline and fill the path
[circlePath stroke];
[circlePath fill];
// // Restore the context to what it was before we messed with it
// [gc restoreGraphicsState];
}
}
最佳答案
编辑:
这是一个有效的实现:
@interface AppDelegate ()
@property ( nonatomic, readonly ) CALayer * ballLayer ;
@end
@implementation AppDelegate
@synthesize ballLayer = _ballLayer ;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[ ((NSView*)self.window.contentView) setWantsLayer:YES ] ;
[ self performSelectorOnMainThread:@selector( doAnimation ) withObject:nil waitUntilDone:NO ] ;
}
-(void)doAnimation
{
[ self.ballLayer addAnimation:[ self createBallLayerAnimation ] forKey:nil ] ;
}
-(CALayer*)ballLayer
{
if ( !_ballLayer )
{
CALayer * layer = [ CALayer layer ] ;
NSImage * image = [[ NSImage alloc ] initWithContentsOfURL:[ NSURL URLWithString:@"http://etc-mysitemyway.s3.amazonaws.com/icons/legacy-previews/icons/glossy-black-icons-sports-hobbies/044450-glossy-black-icon-sports-hobbies-ball-beach.png" ] ] ;
layer.contents = image ;
layer.bounds = (CGRect){ .size = { 100, 100 } } ;
[((NSView*)self.window.contentView).layer addSublayer:layer ] ;
_ballLayer = layer ;
}
return _ballLayer ;
}
-(CAAnimation*)createBallLayerAnimation
{
CAKeyframeAnimation * anim = [ CAKeyframeAnimation animationWithKeyPath:@"position" ] ;
{
CGPathRef p = [ self createBallAnimationPath ] ;
anim.path = p ;
CGPathRelease( p ) ;
}
anim.duration = 3.0 ;
anim.repeatCount = FLT_MAX ;
return anim ;
}
-(CGPathRef)createBallAnimationPath
{
CGRect bounds = ((NSView*)self.window.contentView).bounds ;
CGPathRef p = CGPathCreateWithEllipseInRect( CGRectInset( bounds, bounds.size.width * 0.25, bounds.size.width * 0.25 ), NULL ) ;
return p ;
}
@end
<小时/>
您需要阅读 CGPath
和 CALayer
...
正如其他人所说,不要在您的 applicationDidFinishLaunching
方法中执行此操作 - 您应该在窗口/ View 出现后执行此操作。如果您有自己的从 Nib 加载的 NSView 子类,一种选择可能是覆盖 -awakeFromNib
:
-(void)awakeFromNib
{
[ super awakeFromNib ] ;
[ self performSelectorOnMainThread:@selector( doAnimation ) withObject:nil waitUntilDone:NO ] ; // when the main thread runs again, call `-doAnimation`
}
然后在您的 View 子类中还有一个 -doAnimation
方法(从上面的 -awakeFromNib
调用)
-(void)doAnimation:
{
CAAnimation * animation = [ CAKeyframeAnimation animationForKeyPath:@"position" ] ;
CGPathRef path = [ self createBallAnimationPath ] ; // method -createBallAnimationPath is defined below...
animation.path = path ;
CGPathRelease( path ) ;
[ self.ballLayer addAnimation:animation forKey:nil ] ; // ballLayer is the property that contains a reference to layer that contains the image you want to animate along the path
}
有一个方法来创建你的路径:
-(CGPathRef)createBallAnimationPath
{
CGMutablePathRef result = CGPathCreateMutable() ;
CGPathMoveToPoint( result, 100, 100 ) ;
CGPathAddLineToPoint( result, 1000, 1000 ) ;
return result ;
}
关于objective-c - 使用 nsbezierpath(objective -c)) 在 cocoa 中移动球/圆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19650688/
我试图让球弹起,或者在它们碰撞时反转方向。我让它检查移动方法中的碰撞。它检查两个球之间是否发生碰撞,如果发生碰撞,它将反转速度。问题是,有时球会互相穿过,主要是较小的球。球要么弹跳得早,要么弹得晚,要
我一直在努力根据 2 个弹跳圆/球获得正确的矢量值。我知道他们什么时候反弹;使用毕达哥拉斯,但后来我迷路了。我知道我可能不得不使用三 Angular 函数 cos/sin/tan2。 情况,以我的形象
using UnityEngine; using System.Collections; public class audio : MonoBehaviour { public AudioClip
我正在尝试创建 3d 球体的动画,该动画是由该球体表面上的随机点制作的。这是我的代码,我在其中创建 500 个随机极点,然后将这些极坐标转换为笛卡尔坐标,然后将 X 和 Y 坐标映射到屏幕。这就是我得
我创建的这个程序应该基本上使用公式 V=Pi*h^2(3r-h)/3 但我的最终答案并没有相加。 例如:如果我用 1 代替半径,用 2 代替高度,我应该得到 4.18,但通过程序我得到 -1。 #in
我正在尝试制作一个简单的游戏,但如果我需要弹跳球的图像,我该怎么做呢?我正在做这个- function draw() { ctx.clearRect(0, 0, 300, 300);
我只是提出一个有可能结束的想法。我需要画一个 Crystal 球,红色和蓝色粒子随机分布在其中。我想我必须使用 photoshop,甚至尝试在图像中制作球,但由于这是用于研究论文并且不必很花哨,我想知
我有圆与圆相交的代码。但我需要将其扩展到 3-D。你能帮我写函数吗? static class Point{ double x, y, z; int dimension; Po
目标:我有一个三 Angular 形的球。球具有初始位置和速度。我试图弄清楚球会击中三 Angular 形的哪一边。 我试过的: I derived a formula通过参数化球的路径和三 Angu
由于我是 cocos2d 的新手,而且我很挣扎。任何人都可以建议我如何解决这个问题。 我有 3 个盒子(它们是运动体) 还有多个球(它们是动态物体),每个球都有一个标签值(盒子编号)。 我在射球位置和
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 7 年前。 Improve this qu
我正在为 rpm 编写一个 .spec 文件,它只是将一个 tar 球解压到文件系统上的某个目录中 那么我把原来的 tar 球放在哪里呢?我看到的所有示例都是从互联网上下载原始 tar 球的。但就我而
我是 THREE.js 的新手,对物理知识知之甚少 - 但我正在尝试构建一个足球游戏引擎(从顶部看),现在我正在为球的运动而苦苦挣扎。 当尝试将球从一侧移动到另一侧时,旋转始终朝向一个方向,我不明白如
我必须在 Android 中开发一个在屏幕上 move 球的应用程序。我需要用加速度计 move 球。我有这段代码,但球绕过边界并且没有反弹。 package com.example.test
我正在尝试创建一个 Roomba 程序,其中有一个球在屏幕上弹跳,以清洁它经过的瓷砖。该程序应该从所有灰色瓷砖开始,当球经过它们时,瓷砖就会变成白色。目前我有一个可以到处弹跳的球和一个创建 5x5 网
我正在尝试为我当前的作业创建一个加载屏幕效果。 它需要我们创建一个与 position: fixed .以此资金为背景。使用这个 div,有 4 个 与 position: absolute . 我们
我想将一个球(带有图像)扔到一个二维场景中,并在它到达一定距离时检查它是否发生碰撞。但我无法让它正确地“飞”。似乎这个问题已经被问过一百万次了,但随着我发现的越多,我就越困惑..现在我关注了this
这是我的代码 import java.util.*; import javafx.application.Application; import javafx.scene.Scene; import
我是一名优秀的程序员,十分优秀!